summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Remove outdated comment in rnHsTyKiwip/no-arrow-rearrangementVladislav Zavialov2020-09-271-4/+0
| | | | | This comment dates back to 3df40b7b78044206bbcffe3e2c0a57d901baf5e8 and does not seem relevant anymore.
* Don't rearrange (->) in the renamerVladislav Zavialov2020-09-271-36/+26
| | | | | | | | | | The parser produces an AST where the (->) is already associated correctly: 1. (->) has the least possible precedence 2. (->) is right-associative Thus we don't need to handle it in mkHsOpTyRn.
* Fix handling of function coercions (#18747)Krzysztof Gogolewski2020-09-264-1/+135
| | | | This was broken when we added multiplicity to the function type.
* Disallow linear types in FFI (#18472)Krzysztof Gogolewski2020-09-264-10/+48
|
* Make 'undefined x' linear in 'x' (#18731)Krzysztof Gogolewski2020-09-263-2/+13
|
* Bignum: add bigNatFromWordArraySylvain Henry2020-09-262-0/+45
| | | | Reimplementation of integer-gmp's byteArrayToBigNat#
* Extract SharedIdEnv into its own moduleSebastian Graf2020-09-265-143/+160
| | | | | | It's now named `GHC.Types.Unique.SDFM.UniqSDFM`. The implementation is more clear about its stated goals and supported operations.
* PmCheck: Big refactor of module structureSebastian Graf2020-09-2618-1826/+2001
| | | | | | | | | | | | | | * Move everything from `GHC.HsToCore.PmCheck.*` to `GHC.HsToCore.Pmc.*` in analogy to `GHC.Tc`, rename exported `covCheck*` functions to `pmc*` * Rename `Pmc.Oracle` to `Pmc.Solver` * Split off the LYG desugaring and checking steps into their own modules (`Pmc.Desugar` and `Pmc.Check` respectively) * Split off a `Pmc.Utils` module with stuff shared by `Pmc.{,Desugar,Check,Solver}` * Move `Pmc.Types` to `Pmc.Solver.Types`, add a new `Pmc.Types` module with all the LYG types, which form the interfaces between `Pmc.{Desugar,Check,Solver,}`.
* Various documentation fixesKrzysztof Gogolewski2020-09-259-20/+21
| | | | | | | | | | | * Remove UnliftedFFITypes from conf. Some time ago, this extension was undocumented and we had to silence a warning. This is no longer needed. * Use r'' in conf.py. This fixes a Sphinx warning: WARNING: Support for evaluating Python 2 syntax is deprecated and will be removed in Sphinx 4.0. Convert docs/users_guide/conf.py to Python 3 syntax. * Mark GHCForeignImportPrim as documented * Fix formatting in template_haskell.rst * Remove 'recursive do' from the list of unsupported items in TH
* Fix typed holes causing linearity errors (#18491)Krzysztof Gogolewski2020-09-253-0/+10
|
* Bignum: implement extended GCD (#18427)Sylvain Henry2020-09-2513-30/+1415
|
* Bignum: refactor backend modulesSylvain Henry2020-09-258-38/+53
| | | | | | * move backends into GHC.Num.Backend.* * split backend selection into GHC.Num.Backend and GHC.Num.Backend.Selected to avoid duplication with the Check backend
* Pattern guards BindStmt always use multiplicity ManyArnaud Spiwack2020-09-254-1/+21
| | | | | | | | | Fixes #18439 . The rhs of the pattern guard was consumed with multiplicity one, while the pattern assumed it was Many. We use Many everywhere instead. This is behaviour consistent with that of `case` expression. See #18738.
* Print RET_BIG stack closuresSven Tennie2020-09-251-7/+13
| | | | | | | | | A RET_BIG closure has a large bitmap that describes it's payload and can be printed with printLargeBitmap(). Additionally, the output for payload closures of small and big bitmaps is changed: printObj() is used to print a bit more information about what's on the stack.
* Accept new test output for #17218Sebastian Graf2020-09-252-4/+2
| | | | | | The expected test output was plain wrong. It has been fixed for a long time. Thus we can close #17218.
* Add a regression test for #18609Sebastian Graf2020-09-253-0/+75
| | | | | The egregious performance hits are gone since !4050. So we fix #18609.
* Add regression tests for #18371Sebastian Graf2020-09-253-0/+66
| | | | | They have been fixed by !3959, I believe. Fixes #18371.
* gitlab-ci: Drop Darwin cleanup jobBen Gamari2020-09-251-39/+0
| | | | We now have a proper periodic clean-up script installed on the runners.
* Stop removing definitions of record fields in GHC.Iface.Ext.AstZubin Duggal2020-09-251-16/+10
|
* ci: Add ad-hoc performance testing ruleBen Gamari2020-09-252-0/+64
|
* ci.sh: Factor out common utilitiesBen Gamari2020-09-252-47/+55
|
* Make sizeExpr strict in the size threshold to facilitate WW.Andreas Klebinger2020-09-251-1/+4
|
* Namespace the Hadrian linting rule for baseHécate2020-09-241-6/+6
|
* PmCheck: Desugar string literal patterns with -XRebindableSyntax correctly ↵Sebastian Graf2020-09-244-5/+38
| | | | | | (#18708) Fixes #18708.
* Improve kind generalisation, error messagesSimon Peyton Jones2020-09-24141-964/+1329
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch does two things: * It refactors GHC.Tc.Errors a bit. In debugging Quick Look I was forced to look in detail at error messages, and ended up doing a bit of refactoring, esp in mkTyVarEqErr'. It's still quite a mess, but a bit better, I think. * It makes a significant improvement to the kind checking of type and class declarations. Specifically, we now ensure that if kind checking fails with an unsolved constraint, all the skolems are in scope. That wasn't the case before, which led to some obscure error messages; and occasional failures with "no skolem info" (eg #16245). Both of these, and the main Quick Look patch itself, affect a /lot/ of error messages, as you can see from the number of files changed. I've checked them all; I think they are as good or better than before. Smaller things * I documented the various instances of VarBndr better. See Note [The VarBndr tyep and its uses] in GHC.Types.Var * Renamed GHC.Tc.Solver.simpl_top to simplifyTopWanteds * A bit of refactoring in bindExplicitTKTele, to avoid the footwork with Either. Simpler now. * Move promoteTyVar from GHC.Tc.Solver to GHC.Tc.Utils.TcMType Fixes #16245 (comment 211369), memorialised as typecheck/polykinds/T16245a Also fixes the three bugs in #18640
* Implement Quick Look impredicativitySimon Peyton Jones2020-09-2494-2119/+3412
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch implements Quick Look impredicativity (#18126), sticking very closely to the design in A quick look at impredicativity, Serrano et al, ICFP 2020 The main change is that a big chunk of GHC.Tc.Gen.Expr has been extracted to two new modules GHC.Tc.Gen.App GHC.Tc.Gen.Head which deal with typechecking n-ary applications, and the head of such applications, respectively. Both contain a good deal of documentation. Three other loosely-related changes are in this patch: * I implemented (partly by accident) points (2,3)) of the accepted GHC proposal "Clean up printing of foralls", namely https://github.com/ghc-proposals/ghc-proposals/blob/ master/proposals/0179-printing-foralls.rst (see #16320). In particular, see Note [TcRnExprMode] in GHC.Tc.Module - :type instantiates /inferred/, but not /specified/, quantifiers - :type +d instantiates /all/ quantifiers - :type +v is killed off That completes the implementation of the proposal, since point (1) was done in commit df08468113ab46832b7ac0a7311b608d1b418c4d Author: Krzysztof Gogolewski <krzysztof.gogolewski@tweag.io> Date: Mon Feb 3 21:17:11 2020 +0100 Always display inferred variables using braces * HsRecFld (which the renamer introduces for record field selectors), is now preserved by the typechecker, rather than being rewritten back to HsVar. This is more uniform, and turned out to be more convenient in the new scheme of things. * The GHCi debugger uses a non-standard unification that allows the unification variables to unify with polytypes. We used to hack this by using ImpredicativeTypes, but that doesn't work anymore so I introduces RuntimeUnkTv. See Note [RuntimeUnkTv] in GHC.Runtime.Heap.Inspect Updates haddock submodule. WARNING: this patch won't validate on its own. It was too hard to fully disentangle it from the following patch, on type errors and kind generalisation. Changes to tests * Fixes #9730 (test added) * Fixes #7026 (test added) * Fixes most of #8808, except function `g2'` which uses a section (which doesn't play with QL yet -- see #18126) Test added * Fixes #1330. NB Church1.hs subsumes Church2.hs, which is now deleted * Fixes #17332 (test added) * Fixes #4295 * This patch makes typecheck/should_run/T7861 fail. But that turns out to be a pre-existing bug: #18467. So I have just made T7861 into expect_broken(18467)
* Update Lock.hs with more documentation to make sure that the Boolean return ↵syd@cs-syd.eu2020-09-241-0/+2
| | | | | | value is clear. [skip ci]
* Remove redundant "do", "return" and language extensions from baseHécate2020-09-2346-188/+191
|
* Preliminary work towards removing DynFlags -> Driver.Ppr dependencySylvain Henry2020-09-231-3/+4
|
* Remove sdocWithDynFlags (fix #10143)Sylvain Henry2020-09-232-12/+2
|
* Refactor CLabel pretty-printingSylvain Henry2020-09-2310-224/+203
| | | | | | | | | | * Don't depend on the selected backend to know if we print Asm or C labels: we already have PprStyle to determine this. Moreover even when a native backend is used (NCG, LLVM) we may want to C headers containing pretty-printed labels, so it wasn't a good predicate anyway. * Make pretty-printing code clearer and avoid partiality
* Bump submodulesBen Gamari2020-09-233-0/+0
| | | | | | * Bump bytestring to 0.10.12.0 * Bump Cabal to 3.4.0.0-rc3 * Bump Win32 to 2.10.0.0
* Remove the list of loaded modules from the ghci promptHécate2020-09-232-241/+226
|
* PmCheck: Rewrite inhabitation testSebastian Graf2020-09-2211-1225/+1210
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We used to produce inhabitants of a pattern-match refinement type Nabla in the checker in at least two different and mostly redundant ways: 1. There was `provideEvidence` (now called `generateInhabitingPatterns`) which is used by `GHC.HsToCore.PmCheck` to produce non-exhaustive patterns, which produces inhabitants of a Nabla as a sub-refinement type where all match variables are instantiated. 2. There also was `ensure{,All}Inhabited` (now called `inhabitationTest`) which worked slightly different, but was whenever new type constraints or negative term constraints were added. See below why `provideEvidence` and `ensureAllInhabited` can't be the same function, the main reason being performance. 3. And last but not least there was the `nonVoid` test, which tested that a given type was inhabited. We did use this for strict fields and -XEmptyCase in the past. The overlap of (3) with (2) was always a major pet peeve of mine. The latter was quite efficient and proven to work for recursive data types, etc, but could not handle negative constraints well (e.g. we often want to know if a *refined* type is empty, such as `{ x:[a] | x /= [] }`). Lower Your Guards suggested that we could get by with just one, by replacing both functions with `inhabitationTest` in this patch. That was only possible by implementing the structure of φ constraints as in the paper, namely the semantics of φ constructor constraints. This has a number of benefits: a. Proper handling of unlifted types and strict fields, fixing #18249, without any code duplication between `GHC.HsToCore.PmCheck.Oracle.instCon` (was `mkOneConFull`) and `GHC.HsToCore.PmCheck.checkGrd`. b. `instCon` can perform the `nonVoid` test (3) simply by emitting unliftedness constraints for strict fields. c. `nonVoid` (3) is thus simply expressed by a call to `inhabitationTest`. d. Similarly, `ensureAllInhabited` (2), which we called after adding type info, now can similarly be expressed as the fuel-based `inhabitationTest`. See the new `Note [Why inhabitationTest doesn't call generateInhabitingPatterns]` why we still have tests (1) and (2). Fixes #18249 and brings nice metric decreases for `T17836` (-76%) and `T17836b` (-46%), as well as `T18478` (-8%) at the cost of a few very minor regressions (< +2%), potentially due to the fact that `generateInhabitingPatterns` does more work to suggest the minimal COMPLETE set. Metric Decrease: T17836 T17836b
* PmCheck - Comments only: Replace /~ by ≁Sebastian Graf2020-09-223-33/+33
|
* Fix the occurrence analyserSimon Peyton Jones2020-09-224-480/+611
| | | | | | | | | | | | | | | | | | | Ticket #18603 demonstrated that the occurrence analyser's handling of local RULES for imported Ids (which I now call IMP-RULES) was inadequate. It led the simplifier into an infnite loop by failing to label a binder as a loop breaker. The main change in this commit is to treat IMP-RULES in a simple and uniform way: as extra rules for the local binder. See Note [IMP-RULES: local rules for imported functions] This led to quite a bit of refactoring. The result is still tricky, but it's much better than before, and better documented I think. Oh, and it fixes the bug.
* Better eta-expansion (again) and don't specilise DFunsSimon Peyton Jones2020-09-2216-698/+870
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch fixes #18223, which made GHC generate an exponential amount of code. There are three quite separate changes in here 1. Re-engineer eta-expansion (again). The eta-expander was generating lots of intermediate stuff, which could be optimised away, but which choked the simplifier meanwhile. Relatively easy to kill it off at source. See Note [The EtaInfo mechanism] in GHC.Core.Opt.Arity. The main new thing is the use of pushCoArg in getArg_maybe. 2. Stop Specialise specalising DFuns. This is the cause of a huge (and utterly unnecessary) blowup in program size in #18223. See Note [Do not specialise DFuns] in GHC.Core.Opt.Specialise. I also refactored the Specialise monad a bit... it was silly, because it passed on unchanging values as if they were mutable state. 3. Do an extra Simplifer run, after SpecConstra and before late-Specialise. I found (investigating perf/compiler/T16473) that failing to do this was crippling *both* SpecConstr *and* Specialise. See Note [Simplify after SpecConstr] in GHC.Core.Opt.Pipeline. This change does mean an extra run of the Simplifier, but only with -O2, and I think that's acceptable. T16473 allocates *three* times less with this change. (I changed it to check runtime rather than compile time.) Some smaller consequences * I moved pushCoercion, pushCoArg and friends from SimpleOpt to Arity, because it was needed by the new etaInfoApp. And pushCoValArg now returns a MCoercion rather than Coercion for the argument Coercion. * A minor, incidental improvement to Core pretty-printing This does fix #18223, (which was otherwise uncompilable. Hooray. But there is still a big intermediate because there are some very deeply nested types in that program. Modest reductions in compile-time allocation on a couple of benchmarks T12425 -2.0% T13253 -10.3% Metric increase with -O2, due to extra simplifier run T9233 +5.8% T12227 +1.8% T15630 +5.0% There is a spurious apparent increase on heap residency on T9630, on some architectures at least. I tried it with -G1 and the residency is essentially unchanged. Metric Increase T9233 T12227 T9630 Metric Decrease T12425 T13253
* hadrian: Add extra-deps: happy-1.20 to stack.yamlBen Gamari2020-09-211-0/+3
| | | | | GHC now requires happy-1.20, which isn't available in LTS-16.14. Fixes #18726.
* Disallow constraints in KindSigCtxtRyan Scott2020-09-214-40/+94
| | | | | | | | | | | | | | | | | | | This patch cleans up how `GHC.Tc.Validity` classifies `UserTypeCtxt`s that can only refer to kind-level positions, which is important for rejecting certain classes of programs. In particular, this patch: * Introduces a new `TypeOrKindCtxt` data type and `typeOrKindCtxt :: UserTypeCtxt -> TypeOrKindCtxt` function, which determines whether a `UserTypeCtxt` can refer to type-level contexts, kind-level contexts, or both. * Defines the existing `allConstraintsAllowed` and `vdqAllowed` functions in terms of `typeOrKindCtxt`, which avoids code duplication and ensures that they stay in sync in the future. The net effect of this patch is that it fixes #18714, in which it was discovered that `allConstraintsAllowed` incorrectly returned `True` for `KindSigCtxt`. Because `typeOrKindCtxt` now correctly classifies `KindSigCtxt` as a kind-level context, this bug no longer occurs.
* Remove unused ThBrackCtxt and ResSigCtxtRyan Scott2020-09-213-12/+0
| | | | Fixes #18715.
* testsuite: Mark TH_spliceE5_prof as broken on WindowsGHC GitLab CI2020-09-201-1/+2
| | | | Due to #18721.
* testsuite: Mark tempfiles as broken on Win32 without WinIOGHC GitLab CI2020-09-201-1/+4
| | | | The old POSIX emulation appears to ignore the user-requested prefix.
* testsuite: Fix WinIO error message normalizationGHC GitLab CI2020-09-201-4/+6
| | | | This wasn't being applied to stderr.
* testsuite: Mark some GHCi/Makefile tests as broken on WindowsBen Gamari2020-09-204-0/+5
| | | | See #18718.
* testsuite: Update expected output for outofmem on WindowsBen Gamari2020-09-201-1/+1
| | | | The error originates from osCommitMemory rather than getMBlocks.
* base/testsuite: Add missing LANGUAGE pragma in ThreadDelay001Ben Gamari2020-09-201-0/+1
| | | | Only affected the Windows codepath.
* testsuite: Unmark T5975[ab] as broken on WindowsBen Gamari2020-09-201-2/+2
| | | | | | Sadly it's unclear *why* they have suddenly started working. Closes #7305.
* testsuite: Unmark T12971 as broken on WindowsBen Gamari2020-09-201-1/+1
| | | | | | It's unclear why, but this no longer seems to fail. Closes #17945.
* Resolve shift/reduce conflicts with %shift (#17232)wip/parsing-shiftVladislav Zavialov2020-09-191-218/+332
|
* rts: Drop field initializer on thread_basic_info_data_tBen Gamari2020-09-191-1/+1
| | | | | This struct has a number of fields and we only care that the value is initialized with zeros. This eliminates the warnings noted in #17905.