Skip to content
Snippets Groups Projects
  1. Sep 22, 2019
  2. Sep 21, 2019
    • Sebastian Graf's avatar
      Get rid of PmFake · a7867c79
      Sebastian Graf authored
      The pattern match oracle can now cope with the abundance of information
      that ViewPatterns, NPlusKPats, overloaded lists, etc. provide.
      
      No need to have PmFake anymore!
      
      Also got rid of a spurious call to `allCompleteMatches`, which we used to call
      *for every constructor* match. Naturally this blows up quadratically for
      programs like `ManyAlternatives`.
      
      -------------------------
      Metric Decrease:
          ManyAlternatives
      
      Metric Increase:
          T11822
      -------------------------
      a7867c79
    • Ömer Sinan Ağacan's avatar
      Document MIN_PAYLOAD_SIZE and mark-compact GC mark bits · ded96fb3
      Ömer Sinan Ağacan authored and Marge Bot's avatar Marge Bot committed
      This updates the documentation of the MIN_PAYLOAD_SIZE constant and adds
      a new Note [Mark bits in mark-compact collector] explaning why the
      mark-compact collector uses two bits per objet and why we need
      MIN_PAYLOAD_SIZE.
      ded96fb3
    • Sebastian Graf's avatar
      PredType for type constraints in the pattern match checker instead of EvVar · 1ea8c451
      Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
      Using EvVars for capturing type constraints implied side-effects in DsM
      when we just wanted to *construct* type constraints.
      
      But giving names to type constraints is only necessary when passing
      Givens to the type checker, of which the majority of the pattern match
      checker should be unaware.
      
      Thus, we simply generate `newtype TyCt = TyCt PredType`, which are
      nicely stateless. But at the same time this means we have to allocate
      EvVars when we want to query the type oracle! So we keep the type oracle
      state as `newtype TyState = TySt (Bag EvVar)`, which nicely makes a
      distinction between new, unchecked `TyCt`s and the inert set in
      `TyState`.
      1ea8c451
  3. Sep 20, 2019
    • Simon Peyton Jones's avatar
      Fix bogus type of case expression · 0dad81ca
      Simon Peyton Jones authored
      Issue #17056 revealed that we were sometimes building a case
      expression whose type field (in the Case constructor) was bogus.
      
      Consider a phantom type synonym
         type S a = Int
      and we want to form the case expression
         case x of K (a::*) -> (e :: S a)
      We must not make the type field of the Case constructor be (S a)
      because 'a' isn't in scope.  We must instead expand the synonym.
      
      Changes in this patch:
      
      * Expand synonyms in the new function CoreUtils.mkSingleAltCase.
      
      * Use mkSingleAltCase in MkCore.wrapFloat, which was the proximate
        source of the bug (when called by exprIsConApp_maybe)
      
      * Use mkSingleAltCase elsewhere
      
      * Documentation
          CoreSyn   new invariant (6) in Note [Case expression invariants]
          CoreSyn   Note [Why does Case have a 'Type' field?]
          CoreUtils Note [Care with the type of a case expression]
      
      * I improved Core Lint's error reporting, which was pretty
        confusing in this case, because it didn't mention that the offending
        type was the return type of a case expression.
      
      * A little bit of cosmetic refactoring in CoreUtils
      0dad81ca
    • Simon Peyton Jones's avatar
      Fix PmOracle.addVarCoreCt in-scope set · 17554248
      Simon Peyton Jones authored
      PmOracle.addVarCoreCt was giving a bogus (empty) in-scope set to
      exprIsConApp_maybe, which resulted in a substitution-invariant
      failure (see MR !1647 discussion).
      
      This patch fixes it, by taking the free vars of the expression.
      17554248
    • John Ericson's avatar
      Remove pointless partiality in `Parser.ajs` · 1b7e1d31
      John Ericson authored and Marge Bot's avatar Marge Bot committed
      1b7e1d31
    • Matthew Pickering's avatar
      Pass -j to ghc-in-ghci CI job · 5390b553
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      5390b553
    • Matthew Pickering's avatar
      Remove trailing whitespace · 070f7b85
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      070f7b85
    • Matthew Pickering's avatar
      hadrian/ghci.sh: Enable building in parallel · f257bf73
      Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
      f257bf73
    • Ben Gamari's avatar
      testsuite: Add test for #17202 · 2f8ce45a
      Ben Gamari authored and Marge Bot's avatar Marge Bot committed
      2f8ce45a
    • Sylvain Henry's avatar
      Module hierarchy: Hs (#13009) · 51192964
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      Add GHC.Hs module hierarchy replacing hsSyn.
      
      Metric Increase:
          haddock.compiler
      51192964
    • Ben Gamari's avatar
      users guide: Fix link to let generalization blog post · 4853d962
      Ben Gamari authored and Marge Bot's avatar Marge Bot committed
      Fixes #17200.
      4853d962
    • Alp Mestanogullari's avatar
      ErrUtils: split withTiming into withTiming and withTimingSilent · b3e5c731
      Alp Mestanogullari authored and Marge Bot's avatar Marge Bot committed
      'withTiming' becomes a function that, when passed '-vN' (N >= 2) or
      '-ddump-timings', will print timing (and possibly allocations) related
      information. When additionally built with '-eventlog' and executed with
      '+RTS -l', 'withTiming' will also emit both 'traceMarker' and 'traceEvent'
      events to the eventlog.
      
      'withTimingSilent' on the other hand will never print any timing information,
      under any circumstance, and will only emit 'traceEvent' events to the eventlog.
      As pointed out in !1672, 'traceMarker' is better suited for things that we
      might want to visualize in tools like eventlog2html, while 'traceEvent'
      is better suited for internal events that occur a lot more often and that we
      don't necessarily want to visualize.
      
      This addresses #17138 by using 'withTimingSilent' for all the codegen bits
      that are expressed as a bunch of small computations over streams of codegen
      ASTs.
      b3e5c731
  4. Sep 19, 2019
    • Ben Gamari's avatar
      testsuite: Add testcase for #17206 · 52173990
      Ben Gamari authored and Marge Bot's avatar Marge Bot committed
      52173990
    • Sebastian Graf's avatar
      Add a regression test for #11822 · 2a8867cf
      Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
      The particular test is already fixed, but the issue seems to have
      multiple different test cases lumped together.
      2a8867cf
    • Sebastian Graf's avatar
      Extract PmTypes module from PmExpr and PmOracle · baf47661
      Sebastian Graf authored and Marge Bot's avatar Marge Bot committed
      Apparently ghc-lib-parser's API blew up because the newly induced cyclic
      dependency between TcRnTypes and PmOracle pulled in the other half of
      GHC into the relevant strongly-connected component.
      
      This patch arranges it so that PmTypes exposes mostly data type
      definitions and type class instances to be used within PmOracle, without
      importing the any of the possibly offending modules DsMonad, TcSimplify
      and FamInst.
      baf47661
Loading