summaryrefslogtreecommitdiff
path: root/compiler
Commit message (Collapse)AuthorAgeFilesLines
* Prelude: Fix version bound on Bits importPeter Trommler2021-04-141-2/+1
| | | | Fixes #19683
* Always generate ModDetails from ModIfaceMatthew Pickering2021-04-146-191/+73
| | | | | | | | | | | | | | | | | | This vastly reduces memory usage when compiling with `--make` mode, from about 900M when compiling Cabal to about 300M. As a matter of uniformity, it also ensures that reading from an interface performs the same as using the in-memory cache. We can also delete all the horrible knot-tying in updateIdInfos. Goes some way to fixing #13586 Accept new output of tests fixing some bugs along the way ------------------------- Metric Decrease: T12545 -------------------------
* Add {lifted,unlifted}DataConKey to pretendNameIsInScope's list of NamesRyan Scott2021-04-131-1/+6
| | | | Fixes #19688.
* Make the specialiser handle polymorphic specialisationSimon Peyton Jones2021-04-131-50/+172
| | | | | | | | | | | | | | | | | | | | | | | | | | | Ticket #13873 unexpectedly showed that a SPECIALISE pragma made a program run (a lot) slower, because less specialisation took place overall. It turned out that the specialiser was missing opportunities because of quantified type variables. It was quite easy to fix. The story is given in Note [Specialising polymorphic dictionaries] Two other minor fixes in the specialiser * There is no benefit in specialising data constructor /wrappers/. (They can appear overloaded because they are given a dictionary to store in the constructor.) Small guard in canSpecImport. * There was a buglet in the UnspecArg case of specHeader, in the case where there is a dead binder. We need a LitRubbish filler for the specUnfolding stuff. I expanded Note [Drop dead args from specialisations] to explain. There is a 4% increase in compile time for T13056, because we generate more specialised code. This seems OK. Metric Increase: T13056
* template-haskell: Run TH splices with err_vars from current contextMatthew Pickering2021-04-121-1/+5
| | | | | | Otherwise, errors can go missing which arise when running the splices. Fixes #19470
* More accurate SrcSpan when reporting redundant constraintsSimon Peyton Jones2021-04-1213-51/+89
| | | | | | | | | | | | | | | | | | | | | | | | We want an accurate SrcSpan for redundant constraints: • Redundant constraint: Eq a • In the type signature for: f :: forall a. Eq a => a -> () | 5 | f :: Eq a => a -> () | ^^^^ This patch adds some plumbing to achieve this * New data type GHC.Tc.Types.Origin.ReportRedundantConstraints (RRC) * This RRC value is kept inside - FunSigCtxt - ExprSigCtxt * Then, when reporting the error in GHC.Tc.Errors, use this SrcSpan to control the error message: GHC.Tc.Errors.warnRedundantConstraints Quite a lot of files are touched in a boring way.
* Fix magicDict in ghci (and in the presence of other ticks)Matthew Pickering2021-04-102-2/+7
| | | | | | | | | | | The problem was that ghci inserts some ticks around the crucial bit of the expression. Just like in some of the other rules we now strip the ticks so that the rule fires more reliably. It was possible to defeat magicDict by using -fhpc as well, so not just an issue in ghci. Fixes #19667 and related to #19673
* Add missing relational constant folding for sized numeric typesJohn Ericson2021-04-101-11/+67
|
* Allow C-- to scrutinize non-native-size wordsJohn Ericson2021-04-103-10/+17
|
* Constants: add a note and fix minor doc glitchesSylvain Henry2021-04-102-26/+76
|
* Read constants header instead of global platformConstantsSylvain Henry2021-04-108-36/+78
| | | | | | | | | | | | | | | | | | | | | | | | | | With this patch we switch from reading the globally installed platformConstants file to reading the DerivedConstants.h header file that is bundled in the RTS unit. When we build the RTS unit itself, we get it from its includes directories. The new parser is more efficient and strict than the Read instance for PlatformConstants and we get about 2.2MB less allocations in every cases. However it only really shows in tests that don't allocate much, hence the following metric decreases. Metric Decrease: Naperian T10421 T10547 T12150 T12234 T12425 T13035 T18304 T18923 T5837 T6048 T18140
* Enhance pretty-printing perfSylvain Henry2021-04-104-58/+136
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | A few refactorings made after looking at Core/STG * Use Doc instead of SDoc in pprASCII to avoid passing the SDocContext that is never used. * Inline every SDoc wrappers in GHC.Utils.Outputable to expose Doc constructs * Add text/[] rule for empty strings (i.e., text "") * Use a single occurrence of pprGNUSectionHeader * Use bangs on Platform parameters and some others Metric Decrease: ManyAlternatives ManyConstructors T12707 T13035 T13379 T18698a T18698b T1969 T3294 T4801 T5321FD T783
* Test #19665 as expect_broken, with commentaryRichard Eisenberg2021-04-102-8/+14
|
* Clarify commentary around the constraint solverRichard Eisenberg2021-04-103-32/+104
| | | | | No changes to code; no changes to theory. Just better explanation.
* Kick out fewer equalities by thinking harderRichard Eisenberg2021-04-102-27/+44
| | | | | | | | | | | | | | | | Close #17672. By scratching our heads quite hard, we realized that we should never kick out Given/Nominal equalities. This commit tweaks the kick-out conditions accordingly. See also Note [K4] which describes what is going on. This does not fix a known misbehavior, but it should be a small improvement in both practice (kicking out is bad, and we now do less of it) and theory (a Given/Nominal should behave just like a filled-in metavariable, which has no notion of kicking out).
* Tweak kick-out condition K2b to deal with LHSsRichard Eisenberg2021-04-103-52/+180
| | | | | | | | | | | | | | Kick out condition K2b really only makes sense for inerts with a type variable on the left. This updates the commentary and the code to skip this check for inerts with type families on the left. Also cleans up some commentary around solver invariants and adds Note [K2b]. Close #19042. test case: typecheck/should_compile/T19042
* Don't tidy type in pprTypeForUserMatthew Pickering2021-04-091-15/+2
| | | | | | | | | | | | | | | | There used to be some cases were kinds were not generalised properly before being printed in GHCi. This seems to have changed in the past so now it's uncessary to tidy before printing out the test case. ``` > :set -XPolyKinds > data A x y > :k A k1 -> k2 -> A ``` This tidying was causing issues with an attempt to increase sharing by making `mkTyConApp` (see !4762)
* Avoid repeated zonking and tidying of types in `relevant_bindings`Matthew Pickering2021-04-091-41/+81
| | | | | | | | | | | The approach taking in this patch is that the tcl_bndrs in TcLclEnv are zonked and tidied eagerly, so that work can be shared across multiple calls to `relevant_bindings`. To test this patch I tried without the `keepThisHole` filter and the test finished quickly. Fixes #14766
* Re-export GHC.Bits from GHC.Prelude with custom shift implementation.Andreas Klebinger2021-04-0938-53/+76
| | | | | | | This allows us to use the unsafe shifts in non-debug builds for performance. For older versions of base we instead export Data.Bits See also #19618
* CoreTidy: handle special cases to preserve more sharing.Sylvain Henry2021-04-091-1/+2
| | | | | Metric Decrease: T16577
* CoreTidy: enhance strictness noteBen Gamari2021-04-091-5/+15
|
* Move Iface.Load errors into Iface.Errors moduleAlfredo Di Napoli2021-04-083-320/+341
| | | | | | | This commit moves the error-related functions in `GHC.Iface.Load` into a brand new module called `GHC.Iface.Errors`. This will avoid boot files and circular dependencies in the context of #18516, in the pretty-printing modules.
* Fix #19649 by using filterInScopeM in rnFamEqnRyan Scott2021-04-082-5/+18
| | | | | | | | | | Previously, associated type family instances would incorrectly claim to implicitly quantify over type variables bound by the instance head in the `HsOuterImplicit`s that `rnFamEqn` returned. This is fixed by using `filterInScopeM` to filter out any type variables that the instance head binds. Fixes #19649.
* Make sure result of demand analysis is forced promptlyMatthew Pickering2021-04-083-89/+160
| | | | | | | | | | | | | | | This avoids a big spike in memory usage during demand analysis. Part of fixing #15455 ------------------------- Metric Decrease: T18698a T18698b T9233 T9675 T9961 -------------------------
* Some extra strictness in Demand.hsMatthew Pickering2021-04-082-3/+13
| | | | | | It seems that these places were supposed to be forced anyway but the forcing has no effect because the result was immediately placed in a lazy box.
* Make sure mergeWithKey is inlined and applied strictlyMatthew Pickering2021-04-082-6/+15
| | | | | | In the particular case of `DmdEnv`, not applying this function strictly meant 500MB of thunks were accumulated before the values were forced at the end of demand analysis.
* Make updTcRef force the resultMatthew Pickering2021-04-081-2/+1
| | | | | | This can lead to a classic thunk build-up in a TcRef Fixes #19596
* Use DmdEnv rather than VarEnv DmdEnvMatthew Pickering2021-04-081-1/+1
|
* Don't retain reference to whole TcLclEnv in SkolemTVMatthew Pickering2021-04-081-1/+2
|
* Stop retaining SimplEnvs in unforced UnfoldingsMatthew Pickering2021-04-082-4/+8
| | | | Related to #15455
* Change foldl' to inline when partially applied (#19534)James Foster2021-04-071-1/+1
| | | | | And though partially applied foldl' is now again inlined, #4301 has not resurfaced, and appears to be resolved.
* Remove dynamic-by-default (#16782)Sylvain Henry2021-04-071-12/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Dynamic-by-default was a mechanism to automatically select the -dynamic way for some targets. It was implemented in a convoluted way: it was defined as a flavour option, hence it couldn't be passed as a global settings (which are produced by `configure` before considering flavours), so a build system rule was used to pass -DDYNAMIC_BY_DEFAULT to the C compiler so that deriveConstants could infer it. * Make build system has it disabled for 8 years (951e28c0625ece7e0db6ac9d4a1e61e2737b10de) * It has never been implemented in Hadrian * Last time someone tried to enable it 1 year ago it didn't work (!2436) * Having this as a global constant impedes making GHC multi-target (see !5427) This commit fully removes support for dynamic-by-default. If someone wants to reimplement something like this, it would probably need to move the logic in the compiler. (Doing this would probably need some refactoring of the way the compiler handles DynFlags: DynFlags are used to store and to pass enabled ways to many parts of the compiler. It can be set by command-line flags, GHC API, global settings. In multi-target GHC, we will use DynFlags to load the target platform and its constants: but at this point with the current DynFlags implementation we can't easily update the existing DynFlags with target-specific options such as dynamic-by-default without overriding ways previously set by the user.)
* Make specialisation a bit more aggressiveSimon Peyton Jones2021-04-071-17/+39
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The patch commit c43c981705ec33da92a9ce91eb90f2ecf00be9fe Author: Simon Peyton Jones <simonpj@microsoft.com> Date: Fri Oct 23 16:15:51 2009 +0000 Fix Trac #3591: very tricky specialiser bug fixed a nasty specialisation bug /for DFuns/. Eight years later, this patch commit 2b74bd9d8b4c6b20f3e8d9ada12e7db645cc3c19 Author: Simon Peyton Jones <simonpj@microsoft.com> Date: Wed Jun 7 12:03:51 2017 +0100 Stop the specialiser generating loopy code extended it to work for /imported/ DFuns. But in the process we lost the fact that it was needed only for DFuns! As a result we started silently losing useful specialisation for non-DFuns. But there was no regression test to spot the lossage. Then, nearly four years later, Andreas filed #19599, which showed the lossage in high relief. This patch restores the DFun test, and adds Note [Avoiding loops (non-DFuns)] to explain why. This is undoubtedly a very tricky corner of the specialiser, and one where I would love to have a more solid argument, even a paper! But meanwhile I think this fixes the lost specialisations without introducing any new loops. I have two regression tests, T19599 and T19599a, so I hope we'll know if we lose them again in the future. Vanishingly small effect on nofib. A couple of compile-time benchmarks improve T9872a(normal) ghc/alloc 1660559328.0 1643827784.0 -1.0% GOOD T9872c(normal) ghc/alloc 1691359152.0 1672879384.0 -1.1% GOOD Many others wiggled around a bit. Metric Decrease: T9872a T9872c
* One-Shotify GHC.Utils.Monad.State (#18202)Andreas Klebinger2021-04-051-1/+15
|
* fix sub-word literals in GHCiLuite Stegeman2021-04-051-9/+26
|
* Correct warning for deprecated and unrecognised flagsAlfredo Di Napoli2021-04-051-13/+3
| | | | | | | | | | Fixes #19616. This commit changes the `GHC.Driver.Errors.handleFlagWarnings` function to rely on the newly introduced `DiagnosticReason`. This allows us to correctly pretty-print the flags which triggered some warnings and in turn remove the cruft around this function (like the extra filtering and the `shouldPrintWarning` function.
* Introduce SevIgnore Severity to suppress warningsAlfredo Di Napoli2021-04-0526-172/+178
| | | | | | | | | | | | | | | | | | | | | | This commit introduces a new `Severity` type constructor called `SevIgnore`, which can be used to classify diagnostic messages which are not meant to be displayed to the user, for example suppressed warnings. This extra constructor allows us to get rid of a bunch of redundant checks when emitting diagnostics, typically in the form of the pattern: ``` when (optM Opt_XXX) $ addDiagnosticTc (WarningWithFlag Opt_XXX) ... ``` Fair warning! Not all checks should be omitted/skipped, as evaluating some data structures used to produce a diagnostic might still be expensive (e.g. zonking, etc). Therefore, a case-by-case analysis must be conducted when deciding if a check can be removed or not. Last but not least, we remove the unnecessary `CmdLine.WarnReason` type, which is now redundant with `DiagnosticReason`.
* Add special case to stripStgTicksTop for []Matthew Pickering2021-04-051-0/+2
| | | | | In the common case where the list of ticks is empty, building a thunk just applies 'reverse' to '[]' which is quite wasteful.
* Implement proposal 403: Lexer cleanupOleg Grenrus2021-04-051-7/+7
| | | | | This allows Other Numbers to be used in identifiers, and also documents other, already existing lexer divergence from Haskell Report
* Compute Severity of diagnostics at birthAlfredo Di Napoli2021-04-0124-444/+457
| | | | | | | | | | | | | | | | | | | | | This commit further expand on the design for #18516 by getting rid of the `defaultReasonSeverity` in favour of a function called `diagReasonSeverity` which correctly takes the `DynFlags` as input. The idea is to compute the `Severity` and the `DiagnosticReason` of each message "at birth", without doing any later re-classifications, which are potentially error prone, as the `DynFlags` might evolve during the course of the program. In preparation for a proper refactoring, now `pprWarning` from the Parser.Ppr module has been renamed to `mkParserWarn`, which now takes a `DynFlags` as input. We also get rid of the reclassification we were performing inside `printOrThrowWarnings`. Last but not least, this commit removes the need for reclassify inside GHC.Tc.Errors, and also simplifies the implementation of `maybeReportError`. Update Haddock submodule
* Add missing axiom exports for CharToNat/NatToCharVladislav Zavialov2021-04-011-0/+2
| | | | | | | When the CharToNat and NatToChar type families were added, the corresponding axioms were not exported. This led to a failure much like #14934
* Move the EPS into UnitEnvSylvain Henry2021-04-018-18/+20
|
* Move HPT in UnitEnvSylvain Henry2021-04-019-56/+76
|
* Move unit DBs in UnitEnvSylvain Henry2021-04-019-38/+56
| | | | | Also make the HomeUnit optional to keep the field strict and prepare for UnitEnvs without a HomeUnit (e.g. in Plugins envs, cf #14335).
* Properly initialise UnitEnvSylvain Henry2021-04-012-5/+25
|
* Encapsulate the EPS IORef in a newtypeSylvain Henry2021-04-017-42/+56
|
* Data.List specialization to []Oleg Grenrus2021-04-011-1/+4
| | | | | | | - Remove GHC.OldList - Remove Data.OldList - compat-unqualified-imports is no-op - update haddock submodule
* Avoid fundep-caused loop in the typecheckerSimon Peyton Jones2021-03-314-47/+140
| | | | | | | | | | | Ticket #19415 showed a nasty typechecker loop, which can happen with fundeps that do not satisfy the coverage condition. This patch fixes the problem. It's described in GHC.Tc.Solver.Interact Note [Fundeps with instances] It's not a perfect solution, as the Note explains, but it's better than the status quo.
* EPA : Rename AnnComment to EpaCommentAlan Zimmerman2021-03-315-88/+93
| | | | Follow-up from !2418, see #19579
* EPA : rename AnnAnchor to EpaAnchorAlan Zimmerman2021-03-3111-94/+94
| | | | Follow-up from !2418, see #19579