summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* primops: Generate ByteArray# index/read/write primopswip/bytearray-docsBen Gamari2020-10-302-113/+359
| | | | | Previously these were mostly undocumented and was ripe for potential inconsistencies.
* primops.txt.pp: Move ByteArray# primops to separate fileBen Gamari2020-10-302-449/+450
| | | | This file will be generated.
* Remove unnecessary gender from comments/docsRichard Eisenberg2020-10-2916-22/+21
| | | | | | | While, say, alternating "he" and "she" in sequential writing may be nicer than always using "they", reading code/documentation is almost never sequential. If this small change makes individuals feel more welcome in GHC's codebase, that's a good thing.
* Check for large tuples more thoroughlywip/T18723Ryan Scott2020-10-2927-74/+326
| | | | | | | | | | | | | | | | | | | | This fixes #18723 by: * Moving the existing `GHC.Tc.Gen.HsType.bigConstraintTuple` validity check to `GHC.Rename.Utils.checkCTupSize` for consistency with `GHC.Rename.Utils.checkTupSize`, and * Using `check(C)TupSize` when checking tuple _types_, in addition to checking names, expressions, and patterns. Note that I put as many of these checks as possible in the typechecker so that GHC can properly distinguish between boxed and constraint tuples. The exception to this rule is checking names, which I perform in the renamer (in `GHC.Rename.Env`) so that we can rule out `(,, ... ,,)` and `''(,, ... ,,)` alike in one fell swoop. While I was in town, I also removed the `HsConstraintTuple` and `HsBoxedTuple` constructors of `HsTupleSort`, which are functionally unused. This requires a `haddock` submodule bump.
* GC: Avoid data race (#18717, #17964)Sylvain Henry2020-10-291-1/+1
|
* Split GHC.Driver.TypesSylvain Henry2020-10-29205-6117/+7237
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I was working on making DynFlags stateless (#17957), especially by storing loaded plugins into HscEnv instead of DynFlags. It turned out to be complicated because HscEnv is in GHC.Driver.Types but LoadedPlugin isn't: it is in GHC.Driver.Plugins which depends on GHC.Driver.Types. I didn't feel like introducing yet another hs-boot file to break the loop. Additionally I remember that while we introduced the module hierarchy (#13009) we talked about splitting GHC.Driver.Types because it contained various unrelated types and functions, but we never executed. I didn't feel like making GHC.Driver.Types bigger with more unrelated Plugins related types, so finally I bit the bullet and split GHC.Driver.Types. As a consequence this patch moves a lot of things. I've tried to put them into appropriate modules but nothing is set in stone. Several other things moved to avoid loops. * Removed Binary instances from GHC.Utils.Binary for random compiler things * Moved Typeable Binary instances into GHC.Utils.Binary.Typeable: they import a lot of things that users of GHC.Utils.Binary don't want to depend on. * put everything related to Units/Modules under GHC.Unit: GHC.Unit.Finder, GHC.Unit.Module.{ModGuts,ModIface,Deps,etc.} * Created several modules under GHC.Types: GHC.Types.Fixity, SourceText, etc. * Split GHC.Utils.Error (into GHC.Types.Error) * Finally removed GHC.Driver.Types Note that this patch doesn't put loaded plugins into HscEnv. It's left for another patch. Bump haddock submodule
* Widen acceptance threshold for T10421aJohn Ericson2020-10-291-1/+1
| | | | | | | Progress towards #18842. As @sgraf812 points out, widening the window is dangerous until the exponential described in #17658 is fixed. But this test has caused enough misery and is low stakes enough that we and @bgamari think it's worth it in this one case for the time being.
* API Annotations: put constructors in alphabetical orderAlan Zimmerman2020-10-281-2/+2
|
* hadrian: Don't quote metric baseline argumentBen Gamari2020-10-281-1/+1
| | | Previously this was quoted inappropriately.
* DmdAnal: Kill `is_thunk` case in `splitFV`Sebastian Graf2020-10-272-26/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The `splitFV` function implements the highly dubious hack described in `Note [Lazy und unleashable free variables]` in GHC.Core.Opt.DmdAnal. It arranges it so that demand signatures only carry strictness info on free variables. Usage info is released through other means, see the Note. It's purely for analysis performance reasons. It turns out that `splitFV` has a quite involved case for thunks that produces slightly different usage signatures and it's not clear why we need it: `splitFV` is only relevant in the LetDown case and the only time we call it on thunks is for top-level or local recursive thunks. Since usage signatures of top-level thunks can only reference other top-level bindings and we completely discard demand info we have on top-level things (see the lack of `setIdDemandInfo` in `dmdAnalTopBind`), the `is_thunk` case is completely irrelevant here. For local, recursive thunks, the added benefit of the `is_thunk` test is marginal: We get used-multiple-times in some cases where previously we had used-once if a recursive thunk has multiple call sites. It's very unlikely and not a case to optimise for. So we kill the `is_thunk` case and inline `splitFV` at its call site, exposing `isWeakDmd` from `GHC.Types.Demand` instead. The NoFib summary supports this decision: ``` Min 0.0% -0.0% Max 0.0% +0.0% Geometric Mean -0.0% -0.0% ```
* gitlab-ci: Bump ci-imagesBen Gamari2020-10-271-1/+1
| | | | Bumps bootstrap compiler to 8.10.1.
* Api Annotations: Introduce AnnPercent for HsExplicitMultAlan Zimmerman2020-10-273-9/+12
| | | | | | | | For the case foo :: a %p -> b The location of the '%' is captured, separate from the 'p'
* Use config.run_ways for multi_compile_and_run testsDavid Eichmann2020-10-271-1/+1
|
* ghc.mk: amend 'make sdist'Sergei Trofimovich2020-10-271-1/+2
| | | | | | | | | | | | | | | | | | | | Noticed 'make sdist' failure seen as: ``` "rm" -rf sdistprep/ghc/ghc-9.1.0.20201020/hadrian/_build/ (SRC_DIST_GHC_DIR)/hadrian/dist-newstyle/ /bin/sh: -c: line 0: syntax error near unexpected token `(' ``` commit 9657f6f34 ("sdist: Include hadrian sources in source distribution") added a new cleanup path without a variable expantion. The change adds variable reference. While at it move directory cleanup to a separate statement. Amends #18794 Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
* Fix two constraint solving problemsSimon Peyton Jones2020-10-2710-62/+129
| | | | | | | | | | | | | | | | | | | | | This patch fixes two problems in the constraint solver. * An actual bug #18555: we were floating out a constraint to eagerly, and that was ultimately fatal. It's explained in Note [Do not float blocked constraints] in GHC.Core.Constraint. This is all very delicate, but it's all going to become irrelevant when we stop floating constraints (#17656). * A major performance infelicity in the flattener. When flattening (ty |> co) we *never* generated Refl, even when there was nothing at all to do. Result: we would gratuitously rewrite the constraint to exactly the same thing, wasting work. Described in #18413, and came up again in #18855. Solution: exploit the special case by calling the new function castCoercionKind1. See Note [castCoercionKind1] in GHC.Core.Coercion
* build system: Clean mingw tarballsBen Gamari2020-10-272-0/+12
| | | | | | Tamar noticed in !4293 that the build systems fail to clean up the mingw tarballs directory (`ghc-tarballs`). Fix this in both the make build system and Hadrian.
* hadrian: Suppress xelatex output unless it failsBen Gamari2020-10-272-1/+16
| | | | | | | As noted in #18835, xelatex produces an absurd amount of output, nearly all of which is meaningless. Silence this. Fixes #18835.
* winio: simplify logic remove optimization step.Tamar Christina2020-10-271-42/+65
|
* Version bump: base-4.16 (#18712)Vladislav Zavialov2020-10-2730-21/+23
| | | | Also bumps upper bounds on base in boot libraries (incl. submodules).
* Fix `instance Bounded a => Bounded (Down a)` (#18716)David Beacham2020-10-272-6/+32
| | | | | | | * Flip `minBound` and `maxBound` to respect the change in ordering * Remove awkward `Enum` (and hence `Integral`) instances for `Data.Ord.Down` * Update changelog
* cmm: Add Note reference to ForeignHintBen Gamari2020-10-231-0/+2
|
* Fix error message location in tcCheckPatSynDeclSimon Peyton Jones2020-10-235-7/+40
| | | | | | | | Ticket #18856 showed that we were failing to set the right location for an error message. Easy to fix, happily. Turns out that this also improves the error location in test T11010, which was bogus before but we had never noticed.
* Parser regression tests, close #12862 #12446wip/parsing-tests-12446-12862Vladislav Zavialov2020-10-215-0/+25
| | | | | These issues were fixed by earlier parser changes, most likely related to whitespace-sensitive parsing.
* testsuite: Mark T12971 as fragile on WindowsBen Gamari2020-10-201-1/+1
| | | | Due to #17945.
* API Annotations: Keep track of unicode for linear arrow notationwip/az/unicode-hsscaledAlan Zimmerman2020-10-2020-76/+107
| | | | | | | | | | | The linear arrow can be parsed as `%1 ->` or a direct single token unicode equivalent. Make sure that this distinction is captured in the parsed AST by using IsUnicodeSyntax where it appears, and introduce a new API Annotation, AnnMult to represent its location when unicode is not used. Updated haddock submodule
* gitlab-ci: Rename FLAVOUR -> BUILD_FLAVOURBen Gamari2020-10-202-8/+7
| | | | | | | Previously the Hadrian jobs used the `FLAVOUR` environment variable to communicate which flavour `ci.sh` should build whereas `make` used `BUILD_FLAVOUR`. This caused unnecessary confusion. Consolidate these two.
* Compile modules with `-fobject-code` enabled to byte-code when loaded with ↵nineonine2020-10-205-6/+49
| | | | | | | | | | | | | | | `*` prefix in ghci (#8042) The documentation states that when using :add and :load, the `*` prefix forces a module to be loaded as byte-code. However, this seems to be ignored when -fobject-code has been enabled. In that case, the compiled code is always used, regardless of whether the *-form is used. The idea is to consult the Targets in HscEnv and check the 'targetAllowObjCode' flag. If the flag for given module is set, then patch up DynFlags and select compilation backend accordingly. This would require a linear scan of course, but that shouldn't be too costly.
* Minor comments, update linear types docsKrzysztof Gogolewski2020-10-205-12/+22
| | | | | | | - Update comments: placeHolderTypeTc no longer exists "another level check problem" was a temporary comment from linear types - Use Mult type synonym (reported in #18676) - Mention multiplicity-polymorphic fields in linear types docs
* testsuite: Add test for #18346Ben Gamari2020-10-203-0/+43
| | | | This was fixed by 4291bddaea3148908c55f235ee8978e1d9aa6f20.
* Remove pdocPrecSylvain Henry2020-10-192-18/+17
| | | | | | pdocPrec was only used in GHC.Cmm.DebugBlock.pprUnwindExpr, so remove it. OutputableP becomes a one-function class which might be better for performance.
* Implement -Woperator-whitespace (#18834)Vladislav Zavialov2020-10-1918-41/+213
| | | | | | | | | | | | | | This patch implements two related warnings: -Woperator-whitespace-ext-conflict warns on uses of infix operators that would be parsed differently were a particular GHC extension enabled -Woperator-whitespace warns on prefix, suffix, and tight infix uses of infix operators Updates submodules: haddock, containers.
* Linting correctionsHécate2020-10-171-1/+1
| | | | | * Bring back LANGUAGE pragmas in GHC.IO.Handle.Lock.Windows * Exclude some modules that are wrongfully reported
* Don't get host RTS ways via settings (#18651)Sylvain Henry2020-10-177-32/+5
| | | | | | | | | | | | To correctly perform a linking hack for Windows we need to link with the RTS GHC is currently using. We used to query the RTS ways via the "settings" file but it is fragile (#18651). The hack hasn't been fixed to take into account all the ways (Tracing) and it makes linking of GHC with another RTS more difficult (we need to link with another RTS and to regenerate the settings file). So this patch uses the ways reported by the RTS itself (GHC.Platform.Ways.hostWays) instead of the "settings" file.
* Apply suggestion to testsuite/tests/ffi/should_run/all.TDylanZA2020-10-171-1/+6
|
* When using rts_setInCallCapability, lock incall threadsDylan Yudaken2020-10-177-8/+145
| | | | | | | | This diff makes sure that incall threads, when using `rts_setInCallCapability`, will be created as locked. If the thread is not locked, the thread might end up being scheduled to a different capability. While this is mentioned in the docs for `rts_setInCallCapability,`, it makes the method significantly less useful as there is no guarantees on the capability being used. This commit also adds a test to make sure things stay on the correct capability.
* Testsuite: Add dead arity analysis testsSebastian Graf2020-10-1755-2537/+809
| | | | | We didn't seem to test these old tests at all, judging from their expected output.
* Arity: Record arity types for non-recursive letsSebastian Graf2020-10-175-63/+214
| | | | | | | | | | | | | | | | | | | | | | | In #18793, we saw a compelling example which requires us to look at non-recursive let-bindings during arity analysis and unleash their arity types at use sites. After the refactoring in the previous patch, the needed change is quite simple and very local to `arityType`'s defn for non-recurisve `Let`. Apart from that, we had to get rid of the second item of `Note [Dealing with bottoms]`, which was entirely a safety measure and hindered optimistic fixed-point iteration. Fixes #18793. The following metric increases are all caused by this commit and a result of the fact that we just do more work now: Metric Increase: T3294 T12545 T12707
* Arity: Refactor fixed-point iteration in GHC.Core.Opt.AritySebastian Graf2020-10-172-70/+99
| | | | | | | | | | | | | | | Arity analysis used to propagate optimistic arity types during fixed-point interation through the `ArityEnv`'s `ae_cheap_fun` field, which is like `GHC.Core.Utils.exprIsCheap`, but also considers the current iteration's optimistic arity, for the binder in question only. In #18793, we have seen that this is a problematic design, because it doesn't allow us to look through PAP bindings of that binder. Hence this patch refactors to a more traditional form with an explicit signature environment, in which we record the optimistic `ArityType` of the binder in question (and at the moment is the *only* binder that is recorded in the arity environment).
* Skip type family defaults with hs-boot and hsig filesJohn Ericson2020-10-1717-5/+269
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Works around #17190, possible resolution for #17224. New design is is according to accepted [GHC Propoal 320]. Instances in signatures currently unconditionally opt into associated family defaults if no explicit instance is given. This is bad for two reasons: 1. It constrains possible instantiations to use the default, rather than possibly define the associated family differently. 2. It breaks compilation as type families are unsupported in signatures. This PR simply turns off the filling in of defaults in those cases. Additionally, it squelches a missing definition warning for hs-boot too that was only squelched for hsig before. The downsides are: 1. There is no way to opt into the default, other than copying its definition. 2. If we fixed type classes in signatures, and wanted instances to have to explicitly *out of* rather than into the default, that would now be a breaking change. The change that is most unambiguously goood is harmonizing the warning squelching between hs-boot or hsig. Maybe they should have the warning (opt out of default) maybe they shouldn't (opt in to default), but surely it should be the same for both. Add hs-boot version of a backpack test regarding class-specified defaults in instances that appear in an hs-boot file. The metrics increase is very slight and makes no sense --- at least no one has figured anything out after this languishing for a while, so I'm just going to accept it. Metric Increase: T10421a [GHC proposal 320]: https://github.com/ghc-proposals/ghc-proposals/pull/320
* gitlab-ci: s/allow_newer/allow_failureBen Gamari2020-10-171-1/+1
| | | Silly mistake on my part.
* gitlab-ci: Allow doc-tarball job to failBen Gamari2020-10-171-0/+2
| | | | Currently the Hadrian build appears not to package documentation correctly, causing doc-tarball to fail due to the Windows build.
* Clarify Eq documentation #18713f-a2020-10-161-9/+4
|
* gitlab-ci: Fix Hadrian bindist namesBen Gamari2020-10-162-7/+14
|
* gitlab-ci: Remove allow_failure from Windows jobsBen Gamari2020-10-161-6/+0
|
* rts: Add __mingw_vfprintf to RtsSymbols.cBen Gamari2020-10-161-1/+3
| | | | | Following the model of the other printf symbols. See Note [Symbols for MinGW's printf].
* testsuite: Account for -Wnoncanonical-monoid-instances changes on WindowsBen Gamari2020-10-163-9/+0
|
* testsuite: Sort metrics by metric typeBen Gamari2020-10-161-1/+15
| | | | Closes #18838.
* base: Reintroduce necessary LANGUAGE pragmasBen Gamari2020-10-161-0/+2
| | | | These were incorrectly removed in a recent cleanup commit.
* mingw: Extract zst toolchain archivesBen Gamari2020-10-162-3/+4
| | | | This should have been done when the toolchain was bumped.
* compiler/ByteCode: Allow 2^32 local labelsBen Gamari2020-10-153-4/+7
| | | | | | This widens LocalLabel to 2^16, avoiding the crash observed in #14334. Closes #14334.