Skip to content
Snippets Groups Projects
  1. Oct 30, 2021
  2. Oct 29, 2021
  3. Oct 28, 2021
  4. Oct 26, 2021
    • sheaf's avatar
      Don't default type variables in type families · 9cc6c193
      sheaf authored and Marge Bot's avatar Marge Bot committed
        This patch removes the following defaulting of type variables
        in type and data families:
      
          - type variables of kind RuntimeRep defaulting to LiftedRep
          - type variables of kind Levity defaulting to Lifted
          - type variables of kind Multiplicity defaulting to Many
      
        It does this by passing "defaulting options" to the `defaultTyVars`
        function; when calling from `tcTyFamInstEqnGuts` or
        `tcDataFamInstHeader` we pass options that avoid defaulting.
      
        This avoids wildcards being defaulted, which caused type families
        to unexpectedly fail to reduce.
      
        Note that kind defaulting, applicable only with -XNoPolyKinds,
        is not changed by this patch.
      
        Fixes #17536
      
      -------------------------
      Metric Increase:
          T12227
      -------------------------
      9cc6c193
    • Zubin's avatar
      0255ef38
  5. Oct 25, 2021
  6. Oct 24, 2021
    • John Ericson's avatar
      Fix dangling reference to RtsConfig.h · 98aa29d3
      John Ericson authored and Marge Bot's avatar Marge Bot committed
      It hasn't existed since a2a67cd5 -- in
      2009!
      98aa29d3
    • Joachim Breitner's avatar
      undefined: Neater CallStack in error message · 3417a81a
      Joachim Breitner authored and Marge Bot's avatar Marge Bot committed
      Users of `undefined` don’t want to see
      ```
      files.hs: Prelude.undefined:
      CallStack (from HasCallStack):
        error, called at libraries/base/GHC/Err.hs:79:14 in base:GHC.Err
        undefined, called at file.hs:151:19 in main:Main
      ```
      but want to see
      ```
      files.hs: Prelude.undefined:
      CallStack (from HasCallStack):
        undefined, called at file.hs:151:19 in main:Main
      ```
      so let’s make that so.
      
      The function for that is `withFrozenCallStack`, but that is not usable
      here (module dependencies, and also not representation-polymorphic). And
      even if it were, it could confuse GHC’s strictness analyzer, leading to
      big regressions in some perf tests (T10421 in particular).
      
      So after shuffling modules and definitions around, I eventually noticed
      that the easiest way is to just not call `error` here.
      
      Fixes #19886
      3417a81a
    • Alan Zimmerman's avatar
      EPA: Use LocatedA for ModuleName · 691c450f
      Alan Zimmerman authored and Marge Bot's avatar Marge Bot committed
      This allows us to use an Anchor with a DeltaPos in it when exact
      printing.
      691c450f
    • Sebastian Graf's avatar
      DmdAnal: Implement Boxity Analysis (#19871) · 3bab222c
      Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
      This patch fixes some abundant reboxing of `DynFlags` in
      `GHC.HsToCore.Match.Literal.warnAboutOverflowedLit` (which was the topic
      of #19407) by introducing a Boxity analysis to GHC, done as part of demand
      analysis. This allows to accurately capture ad-hoc unboxing decisions previously
      made in worker/wrapper in demand analysis now, where the boxity info can
      propagate through demand signatures.
      
      See the new `Note [Boxity analysis]`. The actual fix for #19407 is described in
      `Note [No lazy, Unboxed demand in demand signature]`, but
      `Note [Finalising boxity for demand signature]` is probably a better entry-point.
      
      To support the fix for #19407, I had to change (what was)
      `Note [Add demands for strict constructors]` a bit
      (now `Note [Unboxing evaluated arguments]`). In particular, we now take care of
      it in `finaliseBoxity` (which is only called from demand analaysis) instead of
      `wantToUnboxArg`.
      
      I also had to resurrect `Note [Product demands for function body]` and rename
      it to `Note [Unboxed demand on function bodies returning small products]` to
      avoid huge regressions in `join004` and `join007`, thereby fixing #4267 again.
      See the updated Note for details.
      
      A nice side-effect is that the worker/wrapper transformation no longer needs to
      look at strictness info and other bits such as `InsideInlineableFun` flags
      (needed for `Note [Do not unbox class dictionaries]`) at all. It simply collects
      boxity info from argument demands and interprets them with a severely simplified
      `wantToUnboxArg`. All the smartness is in `finaliseBoxity`, which could be moved
      to DmdAnal completely, if it wasn't for the call to `dubiousDataConInstArgTys`
      which would be awkward to export.
      
      I spent some time figuring out the reason for why `T16197` failed prior to my
      amendments to `Note [Unboxing evaluated arguments]`. After having it figured
      out, I minimised it a bit and added `T16197b`, which simply compares computed
      strictness signatures and thus should be far simpler to eyeball.
      
      The 12% ghc/alloc regression in T11545 is because of the additional `Boxity`
      field in `Poly` and `Prod` that results in more allocation during `lubSubDmd`
      and `plusSubDmd`. I made sure in the ticky profiles that the number of calls
      to those functions stayed the same. We can bear such an increase here, as we
      recently improved it by -68% (in b760c1f7).
      T18698* regress slightly because there is more unboxing of dictionaries
      happening and that causes Lint (mostly) to allocate more.
      
      Fixes #19871, #19407, #4267, #16859, #18907 and #13331.
      
      Metric Increase:
          T11545
          T18698a
          T18698b
      
      Metric Decrease:
          T12425
          T16577
          T18223
          T18282
          T4267
          T9961
      3bab222c
    • Ben Gamari's avatar
      driver: Export wWarningFlagMap · 8300ca2e
      Ben Gamari authored and Marge Bot's avatar Marge Bot committed
      A new feature requires Ghcide to be able to convert warnings to CLI
      flags (WarningFlag -> String). This is most easily implemented in terms
      of the internal function flagSpecOf, which uses an inefficient
      implementation based on linear search through a linked list. This PR
      derives Ord for WarningFlag, and replaces that list with a Map.
      
      Closes #19087.
      8300ca2e
  7. Oct 22, 2021
    • Sebastian Graf's avatar
      WorkWrap: `isRecDataCon` should not eta-reduce NewTyCon field tys (#20539) · dd2dba80
      Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
      In #20539 we had a type
      ```hs
      newtype Measured a = Measured { unmeasure :: () -> a }
      ```
      and `isRecDataCon Measured` recursed into `go_arg_ty` for `(->) ()`, because
      `unwrapNewTyConEtad_maybe` eta-reduced it. That triggered an assertion error a
      bit later. Eta reducing the field type is completely wrong to do here! Just call
      `unwrapNewTyCon_maybe` instead.
      
      Fixes #20539 and adds a regression test T20539.
      dd2dba80
    • Matthew Pickering's avatar
      driver: Don't use the log queue abstraction when j = 1 · 621608c9
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      This simplifies the code path for -j1 by not using the log queue queue
      abstraction. The result is that trace output isn't interleaved with
      other dump output like it can be with -j<N>.
      621608c9
    • hexchain's avatar
      Fix compilerConfig stages · 47ba842b
      hexchain authored and Marge Bot's avatar Marge Bot committed
      Fix the call to compilerConfig because it accepts 1-indexed stage
      numbers. Also fixes `make stage=3`.
      47ba842b
    • Sylvain Henry's avatar
      Refactor package imports · 806e49ae
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Use an (Raw)PkgQual datatype instead of `Maybe FastString` to represent
      package imports. Factorize the code that renames RawPkgQual into PkgQual
      in function `rnPkgQual`. Renaming consists in checking if the FastString
      is the magic "this" keyword, the home-unit unit-id or something else.
      
      Bump haddock submodule
      806e49ae
    • Sylvain Henry's avatar
      Remove Indefinite · 6fd7da74
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      We no longer need it after previous IndefUnitId refactoring.
      6fd7da74
    • Sylvain Henry's avatar
      Add test for #19641 · fa5870d3
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Now that Bignum predicates are inlined (!6696), we only need to add a
      test.
      
      Fix #19641
      fa5870d3
    • sheaf's avatar
      Use tcEqType in GHC.Core.Unify.uVar · 77c6f3e6
      sheaf authored and Marge Bot's avatar Marge Bot committed
        Because uVar used eqType instead of tcEqType, it was possible
        to accumulate a substitution that unified Type and Constraint.
      
        For example, a call to `tc_unify_tys` with arguments
      
          tys1 = [ k, k ]
          tys2 = [ Type, Constraint ]
      
        would first add `k = Type` to the substitution. That's fine, but then
        the second call to `uVar` would claim that the substitution also
        unifies `k` with `Constraint`. This could then be used to cause
        trouble, as per #20521.
      
        Fixes #20521
      77c6f3e6
    • Moritz Angermann's avatar
      Do not sign extend CmmInt's unless negative. · 7f4e0e91
      Moritz Angermann authored and Marge Bot's avatar Marge Bot committed
      Might fix #20526.
      7f4e0e91
    • Ziyang Liu's avatar
      Document that `InScopeSet` is a superset of currently in-scope variables · 56b2b04f
      Ziyang Liu authored and Marge Bot's avatar Marge Bot committed
      56b2b04f
  8. Oct 20, 2021
  9. Oct 19, 2021
Loading