Skip to content
Snippets Groups Projects
  1. Feb 27, 2024
  2. Feb 12, 2024
  3. Dec 12, 2023
  4. Aug 22, 2023
    • Krzysztof Gogolewski's avatar
      Testsuite cleanup · 52a6d868
      Krzysztof Gogolewski authored and Marge Bot's avatar Marge Bot committed
      - Remove misleading help text in perf_notes, ways are not metrics
      - Remove no_print_summary - this was used for Phabricator
      - In linters tests, run 'git ls-files' just once.
        Previously, it was called on each has_ls_files()
      - Add ghc-prim.cabal to gitignore, noticed in #23726
      - Remove ghc-prim.cabal, it was accidentally committed in 524c60c8
      52a6d868
  5. Jul 08, 2023
  6. Jun 02, 2023
  7. May 26, 2023
  8. May 23, 2023
    • Simon Peyton Jones's avatar
      Add the SolverStage monad · e1590ddc
      Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
      This refactoring makes a substantial improvement in the
      structure of the type-checker's constraint solver: #23070.
      
      Specifically:
      
      * Introduced the SolverStage monad.   See GHC.Tc.Solver.Monad
        Note [The SolverStage monad]
      
      * Make each solver pipeline (equalities, dictionaries, irreds etc)
        deal with updating the inert set, as a separate SolverStage.  There
        is sometimes special stuff to do, and it means that each full
        pipeline can have type SolverStage Void, indicating that they never
        return anything.
      
      * Made GHC.Tc.Solver.Equality.zonkEqTypes into a SolverStage.  Much nicer.
      
      * Combined the remnants of GHC.Tc.Solver.Canonical and
        GHC.Tc.Solver.Interact into a new module GHC.Tc.Solver.Solve.
        (Interact and Canonical are removed.)
      
      * Gave the same treatment to dictionary and irred constraints
        as I have already done for equality constraints:
          * New types (akin to EqCt): IrredCt and DictCt
          * Ct is now just a simple sum type
                data Ct
                  = CDictCan      DictCt
                  | CIrredCan     IrredCt
                  | CEqCan        EqCt
                  | CQuantCan     QCInst
                  | CNonCanonical CtEvidence
          * inert_dicts can now have the better type DictMap DictCt, instead of
            DictMap Ct; and similarly inert_irreds.
      
      * Significantly simplified the treatment of implicit parameters.
        Previously we had a number of special cases
          * interactGivenIP, an entire function
          * special case in maybeKickOut
          * special case in findDict, when looking up dictionaries
        But actually it's simpler than that. When adding a new Given, implicit
        parameter constraint to the InertSet, we just need to kick out any
        existing inert constraints that mention that implicit parameter.
      
        The main work is done in GHC.Tc.Solver.InertSet.delIPDict, along with
        its auxiliary GHC.Core.Predicate.mentionsIP.
      
        See Note [Shadowing of implicit parameters] in GHC.Tc.Solver.Dict.
      
      * Add a new fast-path in GHC.Tc.Errors.Hole.tcCheckHoleFit.
        See Note [Fast path for tcCheckHoleFit].  This is a big win in some cases:
        test hard_hole_fits gets nearly 40% faster (at compile time).
      
      * Add a new fast-path for solving /boxed/ equality constraints
        (t1 ~ t2).  See Note [Solving equality classes] in GHC.Tc.Solver.Dict.
        This makes a big difference too: test T17836 compiles 40% faster.
      
      * Implement the PermissivePlan of #23413, which concerns what happens with
        insoluble Givens.   Our previous treatment was wildly inconsistent as that
        ticket pointed out.
      
        A part of this, I simplified GHC.Tc.Validity.checkAmbiguity: now we simply
        don't run the ambiguity check at all if -XAllowAmbiguousTypes is on.
      
      Smaller points:
      
      * In `GHC.Tc.Errors.misMatchOrCND` instead of having a special case for
        insoluble /occurs/ checks, broaden in to all insouluble constraints.
        Just generally better. See Note [Insoluble mis-match] in that module.
      
      As noted above, compile time perf gets better.  Here are the changes
      over 0.5% on Fedora.  (The figures are slightly larger on Windows for
      some reason.)
      
      Metrics: compile_time/bytes allocated
      -------------------------------------
                      LargeRecord(normal)   -0.9%
      MultiLayerModulesTH_OneShot(normal)   +0.5%
                           T11822(normal)   -0.6%
                           T12227(normal)   -1.8% GOOD
                           T12545(normal)   -0.5%
                           T13035(normal)   -0.6%
                           T15703(normal)   -1.4% GOOD
                           T16875(normal)   -0.5%
                           T17836(normal)  -40.7% GOOD
                          T17836b(normal)  -12.3% GOOD
                          T17977b(normal)   -0.5%
                            T5837(normal)   -1.1%
                            T8095(normal)   -2.7% GOOD
                            T9020(optasm)   -1.1%
                   hard_hole_fits(normal)  -37.0% GOOD
      
                                geo. mean   -1.3%
                                minimum    -40.7%
                                maximum     +0.5%
      
      Metric Decrease:
          T12227
          T15703
          T17836
          T17836b
          T8095
          hard_hole_fits
          LargeRecord
          T9198
          T13035
      e1590ddc
  9. May 16, 2023
  10. May 15, 2023
  11. May 09, 2023
    • jeffrey young's avatar
      JS: add GHC.JS.Optimizer, remove RTS.Printer, add Linker.Opt · 64064cfe
      jeffrey young authored and Marge Bot's avatar Marge Bot committed
      This MR changes some simple optimizations and is a first step in re-architecting
      the JS backend pipeline to add the optimizer. In particular it:
      
      - removes simple peep hole optimizations from `GHC.StgToJS.Printer` and removes that module
      - adds module `GHC.JS.Optimizer`
      - defines the same peep hole opts that were removed only now they are `Syntax -> Syntax` transformations rather than `Syntax -> JS code` optimizations
      - hooks the optimizer into code gen
      - adds FuncStat and ForStat constructors to the backend.
      
      Working Ticket:
      - #22736
      
      Related MRs:
      - MR !10142
      - MR !10000
      
      -------------------------
      Metric Decrease:
          CoOpt_Read
          ManyAlternatives
          PmSeriesS
          PmSeriesT
          PmSeriesV
          T10421
          T12707
          T13253
          T13253-spj
          T15164
          T17516
          T18140
          T18282
          T18698a
          T18698b
          T18923
          T1969
          T19695
          T20049
          T3064
          T5321FD
          T5321Fun
          T783
          T9198
          T9233
          T9630
      -------------------------
      64064cfe
  12. Mar 29, 2023
    • sheaf's avatar
      Handle records in the renamer · 3f374399
      sheaf authored
      This patch moves the field-based logic for disambiguating record updates
      to the renamer. The type-directed logic, scheduled for removal, remains
      in the typechecker.
      
      To do this properly (and fix the myriad of bugs surrounding the treatment
      of duplicate record fields), we took the following main steps:
      
        1. Create GREInfo, a renamer-level equivalent to TyThing which stores
           information pertinent to the renamer.
           This allows us to uniformly treat imported and local Names in the
           renamer, as described in Note [GREInfo].
      
        2. Remove GreName. Instead of a GlobalRdrElt storing GreNames, which
           distinguished between normal names and field names, we now store
           simple Names in GlobalRdrElt, along with the new GREInfo information
           which allows us to recover the FieldLabel for record fields.
      
        3. Add namespacing for record fields, within the OccNames themselves.
           This allows us to remove the mangling of duplicate field selectors.
      
           This change ensures we don't print mangled names to the user in
           error messages, and allows us to handle duplicate record fields
           in Template Haskell.
      
        4. Move record disambiguation to the renamer, and operate on the
           level of data constructors instead, to handle #21443.
      
           The error message text for ambiguous record updates has also been
           changed to reflect that type-directed disambiguation is on the way
           out.
      
      (3) means that OccEnv is now a bit more complex: we first key on the
      textual name, which gives an inner map keyed on NameSpace:
      
        OccEnv a ~ FastStringEnv (UniqFM NameSpace a)
      
      Note that this change, along with (2), both increase the memory residency
      of GlobalRdrEnv = OccEnv [GlobalRdrElt], which causes a few tests to
      regress somewhat in compile-time allocation.
      
      Even though (3) simplified a lot of code (in particular the treatment of
      field selectors within Template Haskell and in error messages), it came
      with one important wrinkle: in the situation of
      
        -- M.hs-boot
        module M where { data A; foo :: A -> Int }
        -- M.hs
        module M where { data A = MkA { foo :: Int } }
      
      we have that M.hs-boot exports a variable foo, which is supposed to match
      with the record field foo that M exports. To solve this issue, we add a
      new impedance-matching binding to M
      
        foo{var} = foo{fld}
      
      This mimics the logic that existed already for impedance-binding DFunIds,
      but getting it right was a bit tricky.
      See Note [Record field impedance matching] in GHC.Tc.Module.
      
      We also needed to be careful to avoid introducing space leaks in GHCi.
      So we dehydrate the GlobalRdrEnv before storing it anywhere, e.g. in
      ModIface. This means stubbing out all the GREInfo fields, with the
      function forceGlobalRdrEnv.
      When we read it back in, we rehydrate with rehydrateGlobalRdrEnv.
      This robustly avoids any space leaks caused by retaining old type
      environments.
      
      Fixes #13352 #14848 #17381 #17551 #19664 #21443 #21444 #21720 #21898 #21946 #21959 #22125 #22160 #23010 #23062 #23063
      
      Updates haddock submodule
      
      -------------------------
      Metric Increase:
          MultiComponentModules
          MultiLayerModules
          MultiLayerModulesDefsGhci
          MultiLayerModulesNoCode
          T13701
          T14697
          hard_hole_fits
      -------------------------
      3f374399
  13. Mar 22, 2023
    • Simon Peyton Jones's avatar
      Refactor the constraint solver pipeline · e0b8eaf3
      Simon Peyton Jones authored
      The big change is to put the entire type-equality solver into
      GHC.Tc.Solver.Equality, rather than scattering it over Canonical
      and Interact.  Other changes
      
      * EqCt becomes its own data type, a bit like QCInst.  This is
        great because EqualCtList is then just [EqCt]
      
      * New module GHC.Tc.Solver.Dict has come of the class-contraint
        solver.  In due course it will be all.  One step at a time.
      
      This MR is intended to have zero change in behaviour: it is a
      pure refactor.  It opens the way to subsequent tidying up, we
      believe.
      e0b8eaf3
  14. Jan 05, 2023
    • Krzysztof Gogolewski's avatar
      Misc cleanup · 541aedcd
      Krzysztof Gogolewski authored and Marge Bot's avatar Marge Bot committed
      - Remove unused uniques and hs-boot declarations
      - Fix types of seq and unsafeCoerce#
      - Remove FastString/String roundtrip in JS
      - Use TTG to enforce totality
      - Remove enumeration in Heap/Inspect; the 'otherwise' clause
        serves the primitive types well.
      541aedcd
  15. Oct 25, 2022
    • Simon Peyton Jones's avatar
      Fix binder-swap bug · 41406da5
      Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
      This patch fixes #21229 properly, by avoiding doing a
      binder-swap on dictionary Ids.  This is pretty subtle, and explained
      in Note [Care with binder-swap on dictionaries].
      
      Test is already in simplCore/should_run/T21229
      
      This allows us to restore a feature to the specialiser that we had
      to revert: see Note [Specialising polymorphic dictionaries].
      (This is done in a separate patch.)
      
      I also modularised things, using a new function scrutBinderSwap_maybe
      in all the places where we are (effectively) doing a binder-swap,
      notably
      
      * Simplify.Iteration.addAltUnfoldings
      * SpecConstr.extendCaseBndrs
      
      In Simplify.Iteration.addAltUnfoldings I also eliminated a guard
          Many <- idMult case_bndr
      because we concluded, in #22123, that it was doing no good.
      41406da5
  16. Sep 15, 2022
  17. Sep 14, 2022
  18. Aug 26, 2022
  19. Aug 09, 2022
    • Krzysztof Gogolewski's avatar
      Cleanups around pretty-printing · e9dfd26a
      Krzysztof Gogolewski authored and Marge Bot's avatar Marge Bot committed
      * Remove hack when printing OccNames. No longer needed since e3dcc0d5
      * Remove unused `pprCmms` and `instance Outputable Instr`
      * Simplify `pprCLabel` (no need to pass platform)
      * Remove evil `Show`/`Eq` instances for `SDoc`. They were needed by
        ImmLit, but that can take just a String instead.
      * Remove instance `Outputable CLabel` - proper output of labels
        needs a platform, and is done by the `OutputableP` instance
      e9dfd26a
  20. Jul 22, 2022
    • Dominik Peteler's avatar
      Refactored Simplify pass · 9a3e1f31
      Dominik Peteler authored and Marge Bot's avatar Marge Bot committed
       * Removed references to driver from GHC.Core.LateCC, GHC.Core.Simplify
         namespace and GHC.Core.Opt.Stats.
         Also removed services from configuration records.
      
       * Renamed GHC.Core.Opt.Simplify to GHC.Core.Opt.Simplify.Iteration.
      
       * Inlined `simplifyPgm` and renamed `simplifyPgmIO` to `simplifyPgm`
         and moved the Simplify driver to GHC.Core.Opt.Simplify.
      
       * Moved `SimplMode` and `FloatEnable` to GHC.Core.Opt.Simplify.Env.
      
       * Added a configuration record `TopEnvConfig` for the `SimplTopEnv` environment
         in GHC.Core.Opt.Simplify.Monad.
      
       * Added `SimplifyOpts` and `SimplifyExprOpts`. Provide initialization functions
         for those in a new module GHC.Driver.Config.Core.Opt.Simplify.
         Also added initialization functions for `SimplMode` to that module.
      
       * Moved `CoreToDo` and friends to a new module GHC.Core.Pipeline.Types
         and the counting types and functions (`SimplCount` and `Tick`) to new
         module GHC.Core.Opt.Stats.
      
       * Added getter functions for the fields of `SimplMode`. The pedantic bottoms
         option and the platform are retrieved from the ArityOpts and RuleOpts and the
         getter functions allow us to retrieve values from `SpecEnv` without the
         knowledge where the data is stored exactly.
      
       * Moved the coercion optimization options from the top environment to
         `SimplMode`. This way the values left in the top environment are those
         dealing with monadic functionality, namely logging, IO related stuff and
         counting. Added a note "The environments of the Simplify pass".
      
       * Removed `CoreToDo` from GHC.Core.Lint and GHC.CoreToStg.Prep and got rid of
         `CoreDoSimplify`. Pass `SimplifyOpts` in the `CoreToDo` type instead.
      
       * Prep work before removing `InteractiveContext` from `HscEnv`.
      9a3e1f31
  21. Jun 01, 2022
    • Rodrigo Mesquita's avatar
      TTG: Rework and improve splices · 7975202b
      Rodrigo Mesquita authored and Marge Bot's avatar Marge Bot committed
      This commit redefines the structure of Splices in the AST.
      
      We get rid of `HsSplice` which used to represent typed and untyped
      splices, quasi quotes, and the result of splicing either an expression,
      a type or a pattern.
      
      Instead we have `HsUntypedSplice` which models an untyped splice or a
      quasi quoter, which works in practice just like untyped splices.
      
      The `HsExpr` constructor `HsSpliceE` which used to be constructed with
      an `HsSplice` is split into `HsTypedSplice` and `HsUntypedSplice`. The
      former is directly constructed with an `HsExpr` and the latter now takes
      an `HsUntypedSplice`.
      
      Both `HsType` and `Pat` constructors `HsSpliceTy` and `SplicePat` now
      take an `HsUntypedSplice` instead of a `HsSplice` (remember only
      /untyped splices/ can be spliced as types or patterns).
      
      The result of splicing an expression, type, or pattern is now
      comfortably stored in the extension fields `XSpliceTy`, `XSplicePat`,
      `XUntypedSplice` as, respectively, `HsUntypedSpliceResult (HsType
      GhcRn)`, `HsUntypedSpliceResult (Pat GhcRn)`, and `HsUntypedSpliceResult
      (HsExpr GhcRn)`
      
      Overall the TTG extension points are now better used to
      make invalid states unrepresentable and model the progression between
      stages better.
      
      See Note [Lifecycle of an untyped splice, and PendingRnSplice]
      and Note [Lifecycle of an typed splice, and PendingTcSplice] for more
      details.
      
      Updates haddock submodule
      
      Fixes #21263
      
      -------------------------
      Metric Decrease:
          hard_hole_fits
      -------------------------
      7975202b
  22. May 05, 2022
  23. May 02, 2022
  24. Apr 30, 2022
  25. Apr 28, 2022
    • sheaf's avatar
      Fix unification of ConcreteTvs, removing IsRefl# · a8c99391
      sheaf authored and Marge Bot's avatar Marge Bot committed
      This patch fixes the unification of concrete type variables.
      The subtlety was that unifying concrete metavariables is more subtle
      than other metavariables, as decomposition is possible. See the Note
      [Unifying concrete metavariables], which explains how we unify a
      concrete type variable with a type 'ty' by concretising 'ty', using
      the function 'GHC.Tc.Utils.Concrete.concretise'.
      
      This can be used to perform an eager syntactic check for concreteness,
      allowing us to remove the IsRefl# special predicate. Instead of emitting
      two constraints `rr ~# concrete_tv` and `IsRefl# rr concrete_tv`, we
      instead concretise 'rr'. If this succeeds we can fill 'concrete_tv',
      and otherwise we directly emit an error message to the typechecker
      environment instead of deferring. We still need the error message
      to be passed on (instead of directly thrown), as we might benefit from
      further unification in which case we will need to zonk the stored types.
      To achieve this, we change the 'wc_holes' field of 'WantedConstraints'
      to 'wc_errors', which stores general delayed errors. For the moement,
      a delayed error is either a hole, or a syntactic equality error.
      
      hasFixedRuntimeRep_MustBeRefl is now hasFixedRuntimeRep_syntactic, and
      hasFixedRuntimeRep has been refactored to directly return the most
      useful coercion for PHASE 2 of FixedRuntimeRep.
      
      This patch also adds a field ir_frr to the InferResult datatype,
      holding a value of type Maybe FRROrigin. When this value is not
      Nothing, this means that we must fill the ir_ref field with a type
      which has a fixed RuntimeRep.
      When it comes time to fill such an ExpType, we ensure that the type
      has a fixed RuntimeRep by performing a representation-polymorphism
      check with the given FRROrigin
      This is similar to what we already do to ensure we fill an Infer
      ExpType with a type of the correct TcLevel.
      This allows us to properly perform representation-polymorphism checks
      on 'Infer' 'ExpTypes'.
      
      The fillInferResult function had to be moved to GHC.Tc.Utils.Unify
      to avoid a cyclic import now that it calls hasFixedRuntimeRep.
      
      This patch also changes the code in matchExpectedFunTys to make use
      of the coercions, which is now possible thanks to the previous change.
      This implements PHASE 2 of FixedRuntimeRep in some situations.
      For example, the test cases T13105 and T17536b are now both accepted.
      
      Fixes #21239 and #21325
      
      -------------------------
      Metric Decrease:
          T18223
          T5631
      -------------------------
      a8c99391
  26. Apr 08, 2022
    • Ben Gamari's avatar
      testsuite: Lint RTS #includes · cb1f31f5
      Ben Gamari authored and Marge Bot's avatar Marge Bot committed
      Verifies two important properties of #includes in the RTS:
      
       * That system headers don't appear inside of a `<BeginPrivate.h>` block
         as this can hide system library symbols, resulting in very
         hard-to-diagnose linker errors
      
       * That no headers precede `Rts.h`, ensuring that __USE_MINGW_ANSI_STDIO
         is set correctly before system headers are included.
      cb1f31f5
  27. Apr 06, 2022
    • Ben Gamari's avatar
      testsuite: Lint RTS #includes · a59a66a8
      Ben Gamari authored
      Verifies two important properties of #includes in the RTS:
      
       * That system headers don't appear inside of a `<BeginPrivate.h>` block
         as this can hide system library symbols, resulting in very
         hard-to-diagnose linker errors
      
       * That no headers precede `Rts.h`, ensuring that __USE_MINGW_ANSI_STDIO
         is set correctly before system headers are included.
      a59a66a8
  28. Mar 07, 2022
  29. Mar 02, 2022
    • Richard Eisenberg's avatar
      Make Constraint not *apart* from Type. · c8652a0a
      Richard Eisenberg authored and Marge Bot's avatar Marge Bot committed
      More details in Note [coreView vs tcView]
      
      Close #21092.
      c8652a0a
    • sheaf's avatar
      Introduce ConcreteTv metavariables · b27b2af3
      sheaf authored and Marge Bot's avatar Marge Bot committed
        This patch introduces a new kind of metavariable, by adding the
        constructor `ConcreteTv` to `MetaInfo`. A metavariable with
        `ConcreteTv` `MetaInfo`, henceforth a concrete metavariable, can only
        be unified with a type that is concrete (that is, a type that answers
        `True` to `GHC.Core.Type.isConcrete`).
      
        This solves the problem of dangling metavariables in `Concrete#`
        constraints: instead of emitting `Concrete# ty`, which contains a
        secret existential metavariable, we simply emit a primitive equality
        constraint `ty ~# concrete_tv` where `concrete_tv` is a fresh concrete
        metavariable.
      
        This means we can avoid all the complexity of canonicalising
        `Concrete#` constraints, as we can just re-use the existing machinery
        for `~#`.
      
        To finish things up, this patch then removes the `Concrete#` special
        predicate, and instead introduces the special predicate `IsRefl#`
        which enforces that a coercion is reflexive.
        Such a constraint is needed because the canonicaliser is quite happy
        to rewrite an equality constraint such as `ty ~# concrete_tv`, but
        such a rewriting is not handled by the rest of the compiler currently,
        as we need to make use of the resulting coercion, as outlined in the
        FixedRuntimeRep plan.
      
        The big upside of this approach (on top of simplifying the code)
        is that we can now selectively implement PHASE 2 of FixedRuntimeRep,
        by changing individual calls of `hasFixedRuntimeRep_MustBeRefl` to
        `hasFixedRuntimeRep` and making use of the obtained coercion.
      b27b2af3
  30. Feb 26, 2022
  31. Feb 25, 2022
    • Matthew Pickering's avatar
      Move linters into the tree · 6555b68c
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      This MR moves the GHC linters into the tree, so that they can be run directly using Hadrian.
      
      * Query all files tracked by Git instead of using changed files, so that we can run the exact same linting step locally and in a merge request.
      * Only check that the changelogs don't contain TBA when RELEASE=YES.
      * Add hadrian/lint script, which runs all the linting steps.
      * Ensure the hlint job exits with a failure if hlint is not installed (otherwise we were ignoring the failure). Given that hlint doesn't seem to be available in CI at the moment, I've temporarily allowed failure in the hlint job.
      * Run all linting tests in CI using hadrian.
      6555b68c
  32. Feb 23, 2022
    • Richard Eisenberg's avatar
      Kill derived constraints · a599abba
      Richard Eisenberg authored and Marge Bot's avatar Marge Bot committed
      Co-authored by: Sam Derbyshire
      
      Previously, GHC had three flavours of constraint:
      Wanted, Given, and Derived. This removes Derived constraints.
      
      Though serving a number of purposes, the most important role
      of Derived constraints was to enable better error messages.
      This job has been taken over by the new RewriterSets, as explained
      in Note [Wanteds rewrite wanteds] in GHC.Tc.Types.Constraint.
      
      Other knock-on effects:
       - Various new Notes as I learned about under-described bits of GHC
      
       - A reshuffling around the AST for implicit-parameter bindings,
         with better integration with TTG.
      
       - Various improvements around fundeps. These were caused by the
         fact that, previously, fundep constraints were all Derived,
         and Derived constraints would get dropped. Thus, an unsolved
         Derived didn't stop compilation. Without Derived, this is no
         longer possible, and so we have to be considerably more careful
         around fundeps.
      
       - A nice little refactoring in GHC.Tc.Errors to center the work
         on a new datatype called ErrorItem. Constraints are converted
         into ErrorItems at the start of processing, and this allows for
         a little preprocessing before the main classification.
      
       - This commit also cleans up the behavior in generalisation around
         functional dependencies. Now, if a variable is determined by
         functional dependencies, it will not be quantified. This change
         is user facing, but it should trim down GHC's strange behavior
         around fundeps.
      
       - Previously, reportWanteds did quite a bit of work, even on an empty
         WantedConstraints. This commit adds a fast path.
      
       - Now, GHC will unconditionally re-simplify constraints during
         quantification. See Note [Unconditionally resimplify constraints when
         quantifying], in GHC.Tc.Solver.
      
      Close #18398.
      Close #18406.
      Solve the fundep-related non-confluence in #18851.
      Close #19131.
      Close #19137.
      Close #20922.
      Close #20668.
      Close #19665.
      
      -------------------------
      Metric Decrease:
          LargeRecord
          T9872b
          T9872b_defer
          T9872d
          TcPlugin_RewritePerf
      -------------------------
      a599abba
  33. Feb 08, 2022
  34. Feb 04, 2022
    • Matthew Pickering's avatar
      testsuite: Run testsuite dependency calculation before GHC is built · 62d670eb
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      The main motivation for this patch is to allow tests to be added to the
      testsuite which test things about the source tree without needing to
      build GHC. In particular the notes linter can easily start failing and
      by integrating it into the testsuite the  process of observing these
      changes is caught by normal validation procedures rather than having to
      run the linter specially.
      
      With this patch I can run
      
      ```
      ./hadrian/build test --flavour=devel2  --only="uniques"
      ```
      
      In a clean tree to run the checkUniques linter without having to build
      GHC.
      
      Fixes #21029
      62d670eb
Loading