[Git][ghc/ghc][wip/ipe-data-compression] 63 commits: Don't report redundant Givens from quantified constraints

Finley McIlwaine (@FinleyMcIlwaine) gitlab at gitlab.haskell.org
Mon Jun 19 03:17:18 UTC 2023



Finley McIlwaine pushed to branch wip/ipe-data-compression at Glasgow Haskell Compiler / GHC


Commits:
2b0c9f5e by Simon Peyton Jones at 2023-06-08T07:52:34+00:00
Don't report redundant Givens from quantified constraints

This fixes #23323

See (RC4) in Note [Tracking redundant constraints]

- - - - -
567b32e1 by David Binder at 2023-06-08T18:41:29-04:00
Update the outdated instructions in HACKING.md on how to compile GHC

- - - - -
2b1a4abe by Ryan Scott at 2023-06-09T07:56:58-04:00
Restore mingwex dependency on Windows

This partially reverts some of the changes in !9475 to make `base` and
`ghc-prim` depend on the `mingwex` library on Windows. It also restores the
RTS's stubs for `mingwex`-specific symbols such as `_lock_file`.

This is done because the C runtime provides `libmingwex` nowadays, and
moreoever, not linking against `mingwex` requires downstream users to link
against it explicitly in difficult-to-predict circumstances. Better to always
link against `mingwex` and prevent users from having to do the guesswork
themselves.

See https://gitlab.haskell.org/ghc/ghc/-/merge_requests/10360#note_495873 for
the discussion that led to this.

- - - - -
28954758 by Ryan Scott at 2023-06-09T07:56:58-04:00
RtsSymbols.c: Remove mingwex symbol stubs

As of !9475, the RTS now links against `ucrt` instead of `msvcrt` on Windows,
which means that the RTS no longer needs to declare stubs for the `__mingw_*`
family of symbols. Let's remove these stubs to avoid confusion.

Fixes #23309.

- - - - -
3ab0155b by Ryan Scott at 2023-06-09T07:57:35-04:00
Consistently use validity checks for TH conversion of data constructors

We were checking that TH-spliced data declarations do not look like this:

```hs
data D :: Type = MkD Int
```

But we were only doing so for `data` declarations' data constructors, not for
`newtype`s, `data instance`s, or `newtype instance`s. This patch factors out
the necessary validity checks into its own `cvtDataDefnCons` function and uses
it in all of the places where it needs to be.

Fixes #22559.

- - - - -
a24b83dd by Matthew Pickering at 2023-06-09T15:19:00-04:00
Fix behaviour of -keep-tmp-files when used in OPTIONS_GHC pragma

This fixes the behaviour of -keep-tmp-files when used in an OPTIONS_GHC
pragma for files with module level scope.

Instead of simple not deleting the files, we also need to remove them
from the TmpFs so they are not deleted later on when all the other files
are deleted.

There are additional complications because you also need to remove the
directory where these files live from the TmpFs so we don't try to
delete those later either.

I added two tests.

1. Tests simply that -keep-tmp-files works at all with a single module
   and --make mode.
2. The other tests that temporary files are deleted for other modules
   which don't enable -keep-tmp-files.

Fixes #23339

- - - - -
dcf32882 by Matthew Pickering at 2023-06-09T15:19:00-04:00
withDeferredDiagnostics: When debugIsOn, write landmine into IORef to catch use-after-free.

Ticket #23305 reports an error where we were attempting to use the
logger which was created by withDeferredDiagnostics after its scope had
ended.

This problem would have been caught by this patch and a validate build:

```
+*** Exception: Use after free
+CallStack (from HasCallStack):
+  error, called at compiler/GHC/Driver/Make.hs:<line>:<column> in <package-id>:GHC.Driver.Make
```

This general issue is tracked by #20981

- - - - -
432c736c by Matthew Pickering at 2023-06-09T15:19:00-04:00
Don't return complete HscEnv from upsweep

By returning a complete HscEnv from upsweep the logger (as introduced by
withDeferredDiagnostics) was escaping the scope of
withDeferredDiagnostics and hence we were losing error messages.

This is reminiscent of #20981, which also talks about writing errors
into messages after their scope has ended.

See #23305 for details.

- - - - -
26013cdc by Alexander McKenna at 2023-06-09T15:19:41-04:00
Dump `SpecConstr` specialisations separately

Introduce a `-ddump-spec-constr` flag which debugs specialisations from
`SpecConstr`. These are no longer shown when you use `-ddump-spec`.

- - - - -
4639100b by Matthew Pickering at 2023-06-09T18:50:43-04:00
Add role annotations to SNat, SSymbol and SChar

Ticket #23454 explained it was possible to implement unsafeCoerce
because SNat was lacking a role annotation.

As these are supposed to be singleton types but backed by an efficient
representation the correct annotation is nominal to ensure these kinds
of coerces are forbidden.

These annotations were missed from https://github.com/haskell/core-libraries-committee/issues/85
which was implemented in 532de36870ed9e880d5f146a478453701e9db25d.

CLC Proposal: https://github.com/haskell/core-libraries-committee/issues/170

Fixes #23454

- - - - -
9c0dcff7 by Matthew Pickering at 2023-06-09T18:51:19-04:00
Remove non-existant bytearray-ops.txt.pp file from ghc.cabal.in

This broke the sdist generation.

Fixes #23489

- - - - -
273ff0c7 by David Binder at 2023-06-09T18:52:00-04:00
Regression test T13438 is no longer marked as "expect_broken" in the testsuite driver.

- - - - -
b84a2900 by Andrei Borzenkov at 2023-06-10T08:27:28-04:00
Fix -Wterm-variable-capture scope (#23434)

-Wterm-variable-capture wasn't accordant with type variable
scoping in associated types, in type classes. For example,
this code produced the warning:
  k = 12

  class C k a where
    type AT a :: k -> Type

I solved this issue by reusing machinery of newTyVarNameRn function
that is accordand with associated types: it does lookup for each free type
variable when we are in the type class context. And in this patch I
use result of this work to make sure that -Wterm-variable-capture warns
only on implicitly quantified type variables.

- - - - -
9d1a8d87 by Jorge Mendes at 2023-06-10T08:28:10-04:00
Remove redundant case statement in rts/js/mem.js.
- - - - -
a1f350e2 by Oleg Grenrus at 2023-06-13T09:42:16-04:00
Change WarningWithFlag to plural WarningWithFlags

Resolves #22825

Now each diagnostic can name multiple different warning flags for its reason.

There is currently one use case: missing signatures.
Currently we need to check which warning flags are enabled when
generating the diagnostic, which is against the declarative nature of
the diagnostic framework.

This patch allows a warning diagnostic to have multiple warning flags,
which makes setup more declarative.

The WarningWithFlag pattern synonym is added for backwards compatibility

The 'msgEnvReason' field is added to MsgEnvelope to store the
`ResolvedDiagnosticReason`, which accounts for the enabled flags, and
then that is used for pretty printing the diagnostic.

- - - - -
ec01f0ec by Matthew Pickering at 2023-06-13T09:42:59-04:00
Add a test Way for running ghci with Core optimizations

Tracking ticket: #23059

This runs compile_and_run tests with optimised code with bytecode
interpreter

Changed submodules: hpc, process

Co-authored-by: Torsten Schmits <git at tryp.io>

- - - - -
c6741e72 by Rodrigo Mesquita at 2023-06-13T09:43:38-04:00
Configure -Qunused-arguments instead of hardcoding it

When GHC invokes clang, it currently passes -Qunused-arguments to
discard warnings resulting from GHC using multiple options that aren't
used.

In this commit, we configure -Qunused-arguments into the Cc options
instead of checking if the compiler is clang at runtime and hardcoding
the flag into GHC.

This is part of the effort to centralise toolchain information in
toolchain target files at configure time with the end goal of a runtime
retargetable GHC.

This also means we don't need to call getCompilerInfo ever, which
improves performance considerably (see !10589).

Metric Decrease:
    PmSeriesG
    T10421
    T11303b
    T12150
    T12227
    T12234
    T12425
    T13035
    T13253-spj
    T13386
    T15703
    T16875
    T17836b
    T17977
    T17977b
    T18140
    T18282
    T18304
    T18698a
    T18698b
    T18923
    T20049
    T21839c
    T3064
    T5030
    T5321FD
    T5321Fun
    T5837
    T6048
    T9020
    T9198
    T9872d
    T9961

- - - - -
0128db87 by Victor Cacciari Miraldo at 2023-06-13T09:44:18-04:00
Improve docs for Data.Fixed; adds 'realToFrac' as an option for conversion
between different precisions.

- - - - -
95b69cfb by Ryan Scott at 2023-06-13T09:44:55-04:00
Add regression test for #23143

!10541, the fix for #23323, also fixes #23143. Let's add a regression test to
ensure that it stays fixed.

Fixes #23143.

- - - - -
ed2dbdca by Emily Martins at 2023-06-13T09:45:37-04:00
delete GHCi.UI.Tags module and remove remaining references

Co-authored-by: Tilde Rose <t1lde at protonmail.com>

- - - - -
c90d96e4 by Victor Cacciari Miraldo at 2023-06-13T09:46:26-04:00
Add regression test for 17328

- - - - -
de58080c by Victor Cacciari Miraldo at 2023-06-13T09:46:26-04:00
Skip checking whether constructors are in scope when deriving
newtype instances.

Fixes #17328

- - - - -
5e3c2b05 by Philip Hazelden at 2023-06-13T09:47:07-04:00
Don't suggest `DeriveAnyClass` when instance can't be derived.

Fixes #19692.

Prototypical cases:

    class C1 a where
      x1 :: a -> Int
    data G1 = G1 deriving C1

    class C2 a where
      x2 :: a -> Int
      x2 _ = 0
    data G2 = G2 deriving C2

Both of these used to give this suggestion, but for C1 the suggestion
would have failed (generated code with undefined methods, which compiles
but warns). Now C2 still gives the suggestion but C1 doesn't.

- - - - -
80a0b099 by David Binder at 2023-06-13T09:47:49-04:00
Add testcase for error GHC-00711 to testsuite

- - - - -
e4b33a1d by Oleg Grenrus at 2023-06-14T07:01:21-04:00
Add -Wmissing-poly-kind-signatures

Implements #22826

This is a restricted version of -Wmissing-kind-signatures shown only for polykinded types.

- - - - -
f8395b94 by doyougnu at 2023-06-14T07:02:01-04:00
ci: special case in req_host_target_ghc for JS

- - - - -
b852a5b6 by Gergo ERDI at 2023-06-14T07:02:42-04:00
When forcing a `ModIface`, force the `MINIMAL` pragmas in class definitions

Fixes #23486

- - - - -
c29b45ee by Krzysztof Gogolewski at 2023-06-14T07:03:19-04:00
Add a testcase for #20076

Remove 'recursive' in the error message, since the error
can arise without recursion.

- - - - -
b80ef202 by Krzysztof Gogolewski at 2023-06-14T07:03:56-04:00
Use tcInferFRR to prevent bad generalisation

Fixes #23176

- - - - -
bd8ef37d by Matthew Pickering at 2023-06-14T07:04:31-04:00
ci: Add dependenices on necessary aarch64 jobs for head.hackage ci

These need to be added since we started testing aarch64 on head.hackage
CI. The jobs will sometimes fail because they will start before the
relevant aarch64 job has finished.

Fixes #23511

- - - - -
a0c27cee by Vladislav Zavialov at 2023-06-14T07:05:08-04:00
Add standalone kind signatures for Code and TExp

CodeQ and TExpQ already had standalone kind signatures
even before this change:

	type TExpQ :: TYPE r -> Kind.Type
	type CodeQ :: TYPE r -> Kind.Type

Now Code and TExp have signatures too:

	type TExp :: TYPE r -> Kind.Type
	type Code :: (Kind.Type -> Kind.Type) -> TYPE r -> Kind.Type

This is a stylistic change.

- - - - -
e70c1245 by Tom Ellis at 2023-06-14T07:05:48-04:00
Warn that GHC.TypeLits.Internal should not be used

- - - - -
100650e3 by Tom Ellis at 2023-06-14T07:05:48-04:00
Warn that GHC.TypeNats.Internal should not be used

- - - - -
078250ef by Jacco Krijnen at 2023-06-14T17:17:53-04:00
Add more flags for dumping core passes (#23491)

- - - - -
1b7604af by Jacco Krijnen at 2023-06-14T17:17:53-04:00
Add tests for dumping flags (#23491)

- - - - -
42000000 by Sebastian Graf at 2023-06-14T17:18:29-04:00
Provide a demand signature for atomicModifyMutVar.# (#23047)

Fixes #23047

- - - - -
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.

- - - - -
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

- - - - -
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

- - - - -
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.

- - - - -


30 changed files:

- .gitlab-ci.yml
- .gitlab/gen_ci.hs
- .gitlab/jobs.yaml
- HACKING.md
- compiler/GHC/Builtin/primops.txt.pp
- compiler/GHC/CmmToAsm/AArch64/Instr.hs
- compiler/GHC/Core/Lint.hs
- compiler/GHC/Core/Type.hs
- compiler/GHC/Data/BooleanFormula.hs
- compiler/GHC/Driver/Config/Core/Lint.hs
- compiler/GHC/Driver/Errors.hs
- compiler/GHC/Driver/Flags.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/Decl.hs
- compiler/GHC/Iface/Syntax.hs
- compiler/GHC/IfaceToCore.hs
- compiler/GHC/JS/Make.hs
- compiler/GHC/JS/Syntax.hs
- compiler/GHC/JS/Unsat/Syntax.hs
- compiler/GHC/Rename/HsType.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Rename/Names.hs
- compiler/GHC/StgToCmm/InfoTableProv.hs
- compiler/GHC/StgToJS/Apply.hs
- compiler/GHC/StgToJS/Arg.hs
- compiler/GHC/StgToJS/Closure.hs
- compiler/GHC/StgToJS/CodeGen.hs


The diff was not included because it is too large.


View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/905dec2d36034196cd07481226d359896c62c416...cb9e1ce4d3b9de5b75a92ae721a207a6bc250a78

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/905dec2d36034196cd07481226d359896c62c416...cb9e1ce4d3b9de5b75a92ae721a207a6bc250a78
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20230618/be2f2a0f/attachment-0001.html>


More information about the ghc-commits mailing list