1. 22 Sep, 2019 22 commits
  2. 21 Sep, 2019 3 commits
    • 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
      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
      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. 20 Sep, 2019 10 commits
    • 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
      1b7e1d31
    • Matthew Pickering's avatar
      Pass -j to ghc-in-ghci CI job · 5390b553
      Matthew Pickering authored
      5390b553
    • Matthew Pickering's avatar
      Remove trailing whitespace · 070f7b85
      Matthew Pickering authored
      070f7b85
    • Matthew Pickering's avatar
      f257bf73
    • Ben Gamari's avatar
      testsuite: Add test for #17202 · 2f8ce45a
      Ben Gamari authored
      2f8ce45a
    • Sylvain Henry's avatar
      Module hierarchy: Hs (#13009) · 51192964
      Sylvain Henry authored
      Add GHC.Hs module hierarchy replacing hsSyn.
      
      Metric Increase:
          haddock.compiler
      51192964
    • Ben Gamari's avatar
      4853d962
    • Alp Mestanogullari's avatar
      ErrUtils: split withTiming into withTiming and withTimingSilent · b3e5c731
      Alp Mestanogullari authored
      '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. 19 Sep, 2019 5 commits