summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* rts: Ensure that global regs are never passed as fun call argswip/tsan/codegenBen Gamari2022-12-051-3/+3
| | | | | This is in general unsafe as they may be clobbered if they are mapped to caller-saved machine registers. See Note [Register parameter passing].
* hadrian: Enable Cmm instrumentation in TSAN flavourBen Gamari2022-12-051-1/+1
|
* Hadrian: Drop TSAN_ENABLED define from flavourBen Gamari2022-12-051-3/+5
| | | | This is redundant since the TSANUtils.h already defines it.
* codeGen: Introduce ThreadSanitizer instrumentationBen Gamari2022-12-0511-2/+363
| | | | | | This introduces a new Cmm pass which instruments the program with ThreadSanitizer annotations, allowing full tracking of mutator memory accesses via TSAN.
* cmm/Parser: Atomic load syntaxBen Gamari2022-12-051-3/+23
| | | | | | | Originally I had thought I would just use the `prim` call syntax instead of introducing new syntax for atomic loads. However, it turns out that `prim` call syntax tends to make things quite unreadable. This new syntax seems quite natural.
* cmm/Parser: Add syntax for ordered loads and storesBen Gamari2022-12-053-6/+55
|
* cmm/Parser: Reduce some repetitionBen Gamari2022-12-051-29/+20
|
* Codegen/x86: Eliminate barrier for relaxed accessesBen Gamari2022-12-051-7/+12
|
* llvm: Respect memory specified orderingsBen Gamari2022-12-051-7/+15
|
* cmm: Introduce MemoryOrderingsBen Gamari2022-12-058-24/+36
|
* cmm: Introduce blockConcatBen Gamari2022-12-052-1/+4
|
* hadrian: Don't enable TSAN in stage0 buildBen Gamari2022-12-051-1/+1
|
* Add BufSpan to EpaLocation (#22319, #22558)Vladislav Zavialov2022-12-0511-62/+67
| | | | | | | | | | | | | | | | | | The key part of this patch is the change to mkTokenLocation: - mkTokenLocation (RealSrcSpan r _) = TokenLoc (EpaSpan r) + mkTokenLocation (RealSrcSpan r mb) = TokenLoc (EpaSpan r mb) mkTokenLocation used to discard the BufSpan, but now it is saved and can be retrieved from LHsToken or LHsUniToken. This is made possible by the following change to EpaLocation: - data EpaLocation = EpaSpan !RealSrcSpan + data EpaLocation = EpaSpan !RealSrcSpan !(Strict.Maybe BufSpan) | ... The end goal is to make use of the BufSpan in Parser/PostProcess/Haddock.
* Handle type data declarations in Template Haskell quotations and splices ↵Ross Paterson2022-12-0315-55/+172
| | | | | | | (fixes #22500) This adds a TypeDataD constructor to the Template Haskell Dec type, and ensures that the constructors it contains go in the TyCls namespace.
* addHsOuterFamEqnTyVarBinds: use FreshNamesOnly for explicit bindersVladislav Zavialov2022-12-031-1/+1
| | | | | | | | | | | | | Consider this example: [d| instance forall a. C [a] where type forall b. G [a] b = Proxy b |] When we process "forall b." in the associated type instance, it is unambiguously the binding site for "b" and we want a fresh name for it. Therefore, FreshNamesOnly is more fitting than ReuseBoundNames. This should not have any observable effect but it avoids pointless lookups in the MetaEnv.
* Refactor: FreshOrReuse instead of addTyClTyVarBindsVladislav Zavialov2022-12-031-65/+77
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This is a refactoring that should have no effect on observable behavior. Prior to this change, GHC.HsToCore.Quote contained a few closely related functions to process type variable bindings: addSimpleTyVarBinds, addHsTyVarBinds, addQTyVarBinds, and addTyClTyVarBinds. We can classify them by their input type and name generation strategy: Fresh names only Reuse bound names +---------------------+-------------------+ [Name] | addSimpleTyVarBinds | | [LHsTyVarBndr flag GhcRn] | addHsTyVarBinds | | LHsQTyVars GhcRn | addQTyVarBinds | addTyClTyVarBinds | +---------------------+-------------------+ Note how two functions are missing. Because of this omission, there were two places where a LHsQTyVars value was constructed just to be able to pass it to addTyClTyVarBinds: 1. mk_qtvs in addHsOuterFamEqnTyVarBinds -- bad 2. mkHsQTvs in repFamilyDecl -- bad This prevented me from making other changes to LHsQTyVars, so the main goal of this refactoring is to get rid of those workarounds. The most direct solution would be to define the missing functions. But that would lead to a certain amount of code duplication. To avoid code duplication, I factored out the name generation strategy into a function parameter: data FreshOrReuse = FreshNamesOnly | ReuseBoundNames addSimpleTyVarBinds :: FreshOrReuse -> ... addHsTyVarBinds :: FreshOrReuse -> ... addQTyVarBinds :: FreshOrReuse -> ...
* Mark T16916 fragileBryan Richter2022-12-031-1/+1
| | | | See https://gitlab.haskell.org/ghc/ghc/-/issues/16966
* Fix linearity checking in LintKrzysztof Gogolewski2022-12-023-15/+35
| | | | | | | | Lint was not able to see that x*y <= x*y, because this inequality was decomposed to x <= x*y && y <= x*y, but there was no rule to see that x <= x*y. Fixes #22546.
* Add special case for :Main module in `GHC.IfaceToCore.mk_top_id`Matthew Pickering2022-12-029-1/+58
| | | | | | | | | | | | | | See Note [Root-main Id] The `:Main` special binding is actually defined in the current module (hence don't go looking for it externally) but the module name is rOOT_MAIN rather than the current module so we need this special case. There was already some similar logic in `GHC.Rename.Env` for External Core, but now the "External Core" is in interface files it needs to be moved here instead. Fixes #22405
* ApplicativeDo: Set pattern location before running exhaustiveness checkerMatthew Pickering2022-12-024-1/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | This improves the error messages of the exhaustiveness checker when checking statements which have been moved around with ApplicativeDo. Before: Test.hs:2:3: warning: [GHC-62161] [-Wincomplete-uni-patterns] Pattern match(es) are non-exhaustive In a pattern binding: Patterns of type ‘Maybe ()’ not matched: Nothing | 2 | let x = () | ^^^^^^^^^^ After: Test.hs:4:3: warning: [GHC-62161] [-Wincomplete-uni-patterns] Pattern match(es) are non-exhaustive In a pattern binding: Patterns of type ‘Maybe ()’ not matched: Nothing | 4 | ~(Just res1) <- seq x (pure $ Nothing @()) | Fixes #22483
* Refactor TyCon to have a top-level productSimon Peyton Jones2022-12-0210-513/+463
| | | | | | | | | | | This patch changes the representation of TyCon so that it has a top-level product type, with a field that gives the details (newtype, type family etc), #22458. Not much change in allocation, but execution seems to be a bit faster. Includes a change to the haddock submodule to adjust for API changes.
* CI: Fix CI lintBryan Richter2022-12-011-2/+2
| | | | | Failure was introduced by conflicting changes to gen_ci.hs that did *not* trigger git conflicts.
* CI: Remove ARMv7 jobsBryan Richter2022-12-012-273/+69
| | | | | | | | | | | These jobs fail (and are allowed to fail) nearly every time. Soon they won't even be able to run at all, as we won't currently have runners that can run them. Fixing the latter problem is tracked in #22409. I went ahead and removed all settings and configurations.
* CI: Forbid the fully static build on Alpine to fail.M Farkas-Dyck2022-12-0114-25/+42
| | | | To do so, we mark some tests broken in this configuration.
* Add a missing varToCoreExpr in etaBodyForJoinPointSimon Peyton Jones2022-12-014-34/+379
| | | | | | | | | | | | | | | | | | | | | | | | This subtle bug showed up when compiling a library with 9.4. See #22491. The bug is present in master, but it is hard to trigger; the new regression test T22491 fails in 9.4. The fix was easy: just add a missing varToCoreExpr in etaBodyForJoinPoint. The fix is definitely right though! I also did some other minor refatoring: * Moved the preInlineUnconditionally test in simplExprF1 to before the call to joinPointBinding_maybe, to avoid fruitless eta-expansion. * Added a boolean from_lam flag to simplNonRecE, to avoid two fruitless tests, and commented it a bit better. These refactorings seem to save 0.1% on compile-time allocation in perf/compiler; with a max saving of 1.4% in T9961 Metric Decrease: T9961
* FastString: SAT bucket_matchdoyougnu2022-12-011-9/+8
| | | | | Metric Decrease: MultiLayerModulesTH_OneShot
* Make Functor a quantified superclass of Bifunctor.Baldur Blöndal2022-11-308-7/+37
| | | | | | | | | | | See https://github.com/haskell/core-libraries-committee/issues/91 for discussion. This change relates Bifunctor with Functor by requiring second = fmap. Moreover this change is a step towards unblocking the major version bump of bifunctors and profunctors to major version 6. This paves the way to move the Profunctor class into base. For that Functor first similarly becomes a superclass of Profunctor in the new major version 6.
* DmdAnal: Reflect the `seq` of strict fields of a DataCon worker (#22475)Sebastian Graf2022-11-3010-33/+168
| | | | | | | See the updated `Note [Data-con worker strictness]` and the new `Note [Demand transformer for data constructors]`. Fixes #22475.
* Move Void to GHC.Base...Oleg Grenrus2022-11-309-70/+69
| | | | | | | | | | | | | This change would allow `Void` to be used deeper in module graph. For example exported from `Prelude` (though that might be already possible). Also this change includes a change `stimes @Void _ x = x`, https://github.com/haskell/core-libraries-committee/issues/95 While the above is not required, maintaining old stimes behavior would be tricky as `GHC.Base` doesn't know about `Num` or `Integral`, which would require more hs-boot files.
* Properly cast values when writing/reading unboxed sums.Andreas Klebinger2022-11-3017-82/+791
| | | | | | | Unboxed sums might store a Int8# value as Int64#. This patch makes sure we keep track of the actual value type. See Note [Casting slot arguments] for the details.
* Use mkNakedFunTy in tcPatSynSigSimon Peyton Jones2022-11-306-10/+29
| | | | | | | | | | As #22521 showed, in tcPatSynSig we make a "fake type" to kind-generalise; and that type has unzonked type variables in it. So we must not use `mkFunTy` (which checks FunTy's invariants) via `mkPhiTy` when building this type. Instead we need to use `mkNakedFunTy`. Easy fix.
* Be more careful in GHC.Tc.Solver.Interact.solveOneFromTheOtherSimon Peyton Jones2022-11-306-56/+162
| | | | | | | | We were failing to account for the cc_pend_sc flag in this important function, with the result that we expanded superclasses forever. Fixes #22516.
* Fix @since annotations on WithDict and Coerciblesheaf2022-11-304-5/+18
| | | | Fixes #22453
* Add Javascript backendSylvain Henry2022-11-29283-1476/+28330
| | | | | | | | | | | | | | | Add JS backend adapted from the GHCJS project by Luite Stegeman. Some features haven't been ported or implemented yet. Tests for these features have been disabled with an associated gitlab ticket. Bump array submodule Work funded by IOG. Co-authored-by: Jeffrey Young <jeffrey.young@iohk.io> Co-authored-by: Luite Stegeman <stegeman@gmail.com> Co-authored-by: Josh Meredith <joshmeredith2008@gmail.com>
* testsuite: Don't use grep -q in unpack_sums_7Ben Gamari2022-11-295-7/+4
| | | | | `grep -q` closes stdin as soon as it finds the pattern it is looking for, resulting in #22484.
* testsuite: Mark unpack_sums_6 as fragile due to #22504Ben Gamari2022-11-291-1/+1
| | | | | | This test is explicitly dependent upon runtime, which is generally not appropriate given that the testsuite is run in parallel and generally saturates the CPU.
* Be a bit more selective about floating bottoming expressionsSimon Peyton Jones2022-11-294-43/+196
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This MR arranges to float a bottoming expression to the top only if it escapes a value lambda. See #22494 and Note [Floating to the top] in SetLevels. This has a generally beneficial effect in nofib +-------------------------------++----------+ | ||tsv (rel) | +===============================++==========+ | imaginary/paraffins || -0.93% | | imaginary/rfib || -0.05% | | real/fem || -0.03% | | real/fluid || -0.01% | | real/fulsom || +0.05% | | real/gamteb || -0.27% | | real/gg || -0.10% | | real/hidden || -0.01% | | real/hpg || -0.03% | | real/scs || -11.13% | | shootout/k-nucleotide || -0.01% | | shootout/n-body || -0.08% | | shootout/reverse-complement || -0.00% | | shootout/spectral-norm || -0.02% | | spectral/fibheaps || -0.20% | | spectral/hartel/fft || -1.04% | | spectral/hartel/solid || +0.33% | | spectral/hartel/wave4main || -0.35% | | spectral/mate || +0.76% | +===============================++==========+ | geom mean || -0.12% | The effect on compile time is generally slightly beneficial Metrics: compile_time/bytes allocated ---------------------------------------------- MultiLayerModulesTH_OneShot(normal) +0.3% PmSeriesG(normal) -0.2% PmSeriesT(normal) -0.1% T10421(normal) -0.1% T10421a(normal) -0.1% T10858(normal) -0.1% T11276(normal) -0.1% T11303b(normal) -0.2% T11545(normal) -0.1% T11822(normal) -0.1% T12150(optasm) -0.1% T12234(optasm) -0.3% T13035(normal) -0.2% T16190(normal) -0.1% T16875(normal) -0.4% T17836b(normal) -0.2% T17977(normal) -0.2% T17977b(normal) -0.2% T18140(normal) -0.1% T18282(normal) -0.1% T18304(normal) -0.2% T18698a(normal) -0.1% T18923(normal) -0.1% T20049(normal) -0.1% T21839r(normal) -0.1% T5837(normal) -0.4% T6048(optasm) +3.2% BAD T9198(normal) -0.2% T9630(normal) -0.1% TcPlugin_RewritePerf(normal) -0.4% hard_hole_fits(normal) -0.1% geo. mean -0.0% minimum -0.4% maximum +3.2% The T6048 outlier is hard to pin down, but it may be the effect of reading in more interface files definitions. It's a small program for which compile time is very short, so I'm not bothered about it. Metric Increase: T6048
* Change printing of sized literals to match the proposalKrzysztof Gogolewski2022-11-2930-203/+208
| | | | | | | | Literals in Core were printed as e.g. 0xFF#16 :: Int16#. The proposal 451 now specifies syntax 0xFF#Int16. This change affects the Core printer only - more to be done later. Part of #21422.
* Killing cc_fundeps, streamlining kind equality orientation, and type ↵Apoorv Ingle2022-11-2920-123/+318
| | | | | | | | | | | | | | | | | | | | equality processing order Fixes: #217093 Associated to #19415 This change * Flips the orientation of the the generated kind equality coercion in canEqLHSHetero; * Removes `cc_fundeps` in CDictCan as the check was incomplete; * Changes `canDecomposableTyConAppOk` to ensure we process kind equalities before type equalities and avoiding a call to `canEqLHSHetero` while processing wanted TyConApp equalities * Adds 2 new tests for validating the change - testsuites/typecheck/should_compile/T21703.hs and - testsuites/typecheck/should_fail/T19415b.hs (a simpler version of T19415.hs) * Misc: Due to the change in the equality direction some error messages now have flipped type mismatch errors * Changes in Notes: - Note [Fundeps with instances, and equality orientation] supercedes Note [Fundeps with instances] - Added Note [Kind Equality Orientation] to visualize the kind flipping - Added Note [Decomposing Dependent TyCons and Processing Wanted Equalties]
* compiler: remove unused MO_U_MulMayOfloCheng Shao2022-11-286-19/+1
| | | | We actually only emit MO_S_MulMayOflo and never emit MO_U_MulMayOflo anywhere.
* compiler: generate ccalls for clz/ctz/popcnt in wasm NCGCheng Shao2022-11-283-10/+21
| | | | | | We used to generate a single wasm clz/ctz/popcnt opcode, but it's wrong when it comes to subwords, so might as well generate ccalls for them. See #22470 for details.
* Move hs_mulIntMayOflo cbits to ghc-primCheng Shao2022-11-285-21/+10
| | | | | | It's only used by wasm NCG at the moment, but ghc-prim is a more reasonable place for hosting out-of-line primops. Also, we only need a single version of hs_mulIntMayOflo.
* Redirect output of musttail attribute testWill Hawkins2022-11-261-1/+1
| | | | | Compilation output from test for support of musttail attribute leaked to the console.
* Fix decomposition of TyConAppswip/T22331Simon Peyton Jones2022-11-256-227/+345
| | | | | | | | | | | | | | | | Ticket #22331 showed that we were being too eager to decompose a Wanted TyConApp, leading to incompleteness in the solver. To understand all this I ended up doing a substantial rewrite of the old Note [Decomposing equalities], now reborn as Note [Decomposing TyConApp equalities]. Plus rewrites of other related Notes. The actual fix is very minor and actually simplifies the code: in `can_decompose` in `GHC.Tc.Solver.Canonical.canTyConApp`, we now call `noMatchableIrreds`. A closely related refactor: we stop trying to use the same "no matchable givens" function here as in `matchClassInst`. Instead split into two much simpler functions.
* Print unticked promoted data constructors (#20531)Vladislav Zavialov2022-11-25157-553/+812
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Before this patch, GHC unconditionally printed ticks before promoted data constructors: ghci> type T = True -- unticked (user-written) ghci> :kind! T T :: Bool = 'True -- ticked (compiler output) After this patch, GHC prints ticks only when necessary: ghci> type F = False -- unticked (user-written) ghci> :kind! F F :: Bool = False -- unticked (compiler output) ghci> data False -- introduce ambiguity ghci> :kind! F F :: Bool = 'False -- ticked by necessity (compiler output) The old behavior can be enabled by -fprint-redundant-promotion-ticks. Summary of changes: * Rename PrintUnqualified to NamePprCtx * Add QueryPromotionTick to it * Consult the GlobalRdrEnv to decide whether to print a tick (see mkPromTick) * Introduce -fprint-redundant-promotion-ticks Co-authored-by: Artyom Kuznetsov <hi@wzrd.ht>
* Review suggestions for assorted fixes to avoid Data.List.{head,tail}sheaf2022-11-252-6/+8
|
* Assorted fixes to avoid Data.List.{head,tail}Bodigrim2022-11-2510-20/+27
|
* rts: fix missing Arena.h symbols in RtsSymbols.cCheng Shao2022-11-241-0/+4
| | | | It was an unfortunate oversight in !8961 and broke devel2 builds.
* Convert diagnostics in GHC.Rename.Expr to proper TcRnMessage (#20115)Andrei Borzenkov2022-11-2429-148/+416
| | | | | | | | | | | | | | | | | | | | Problem: avoid usage of TcRnMessageUnknown Solution: The following `TcRnMessage` messages has been introduced: TcRnNoRebindableSyntaxRecordDot TcRnNoFieldPunsRecordDot TcRnIllegalStaticExpression TcRnIllegalStaticFormInSplice TcRnListComprehensionDuplicateBinding TcRnEmptyStmtsGroup TcRnLastStmtNotExpr TcRnUnexpectedStatementInContext TcRnIllegalTupleSection TcRnIllegalImplicitParameterBindings TcRnSectionWithoutParentheses Co-authored-by: sheaf <sam.derbyshire@gmail.com>
* notes: Fix references to HPT space leak noteMatthew Pickering2022-11-231-5/+9
| | | | | | Updating this note was missed when updating the HPT to the HUG. Fixes #22477