1. 27 Nov, 2019 1 commit
    • Sebastian Graf's avatar
      Make warnings for TH splices opt-in · 5a08f7d4
      Sebastian Graf authored
      In #17270 we have the pattern-match checker emit incorrect warnings. The
      reason for that behavior is ultimately an inconsistency in whether we
      treat TH splices as written by the user (`FromSource :: Origin`) or as
      generated code (`Generated`). This was first reported in #14838.
      
      The current solution is to TH splices as `Generated` by default and only
      treat them as `FromSource` when the user requests so
      (-fenable-th-splice-warnings). There are multiple reasons for opt-in
      rather than opt-out:
      
        * It's not clear that the user that compiles a splice is the author of the code
          that produces the warning. Think of the situation where she just splices in
          code from a third-party library that produces incomplete pattern matches.
          In this scenario, the user isn't even able to fix that warning.
        * Gathering information for producing the warnings (pattern-match check
          warnings in particular) is costly. There's no point in doing so if the user
          is not interested in those warnings.
      
      Fixes #17270, but not #14838, because the proper solution needs a GHC
      proposal extending the TH AST syntax.
      5a08f7d4
  2. 25 Nov, 2019 1 commit
  3. 24 Nov, 2019 1 commit
  4. 23 Nov, 2019 4 commits
    • Sebastian Graf's avatar
      Stricten functions ins GHC.Natural · 5747ebe9
      Sebastian Graf authored
      This brings `Natural` on par with `Integer` and fixes #17499.
      Also does some manual CSE for 0 and 1 literals.
      5747ebe9
    • Ryan Scott's avatar
      Prevent -optc arguments from being duplicated in reverse order (#17471) · 15f1dc33
      Ryan Scott authored
      This reverts a part of commit
      7bc5d6c6 that causes all arguments
      to `-optc` (and `-optcxx`) to be passed twice to the C/C++ compiler,
      once in reverse order and then again in the correct order. While
      passing duplicate arguments is usually harmless it can cause breakage
      in this pattern, which is employed by Hackage libraries in the wild:
      
      ```
      ghc Foo.hs foo.c -optc-D -optcFOO
      ```
      
      As `FOO -D -D FOO` will cause compilers to error.
      
      Fixes #17471.
      15f1dc33
    • Abigail's avatar
      Take care to not eta-reduce jumps in CorePrep · de6bbdf2
      Abigail authored
      CorePrep already had a check to prevent it from eta-reducing Ids that
      respond true to hasNoBinding (foreign calls, constructors for unboxed
      sums and products, and Ids with compulsory unfoldings). It did not,
      however, consider join points as ids that 'must be saturated'.
      
      Checking whether the Id responds True to 'isJoinId' should prevent
      CorePrep from turning saturated jumps like the following (from #17429)
      into undersaturated ones:
      
            (\ eta_XP ->
               join { mapped_s1vo _ = lvl_s1vs } in jump mapped_s1vo eta_XP)
      de6bbdf2
    • Ben Gamari's avatar
      rts: Expose interface for configuring EventLogWriters · e43e6ece
      Ben Gamari authored
      This exposes a set of interfaces from the GHC API for configuring
      EventLogWriters. These can be used by consumers like
      [ghc-eventlog-socket](https://github.com/bgamari/ghc-eventlog-socket).
      e43e6ece
  5. 20 Nov, 2019 2 commits
  6. 19 Nov, 2019 2 commits
    • Ben Gamari's avatar
      testsuite: Increase width of stack003 test · a7571a74
      Ben Gamari authored
      Previously the returned tuple seemed to fit in registers on amd64. This
      meant that non-moving collector bug would cause the test to fail on i386
      yet not amd64.
      a7571a74
    • Ben Gamari's avatar
      Give seq a more precise type and remove magic · 08d595c0
      Ben Gamari authored
      `GHC.Prim.seq` previously had the rather plain type:
      
          seq :: forall a b. a -> b -> b
      
      However, it also had a special typing rule to applications
      where `b` is not of kind `Type`.
      
      Issue #17440 noted that levity polymorphism allows us to rather give
      it the more precise type:
      
          seq :: forall (r :: RuntimeRep) a (b :: TYPE r). a -> b -> b
      
      This allows us to remove the special typing rule that we previously
      required to allow applications on unlifted arguments. T9404 contains a
      non-Type application of `seq` which should verify that this works as
      expected.
      
      Closes #17440.
      08d595c0
  7. 17 Nov, 2019 2 commits
  8. 15 Nov, 2019 1 commit
  9. 14 Nov, 2019 1 commit
  10. 13 Nov, 2019 2 commits
  11. 11 Nov, 2019 3 commits
  12. 10 Nov, 2019 2 commits
  13. 09 Nov, 2019 12 commits
    • Simon Peyton Jones's avatar
      Use the right type in :force · 1f98e47d
      Simon Peyton Jones authored
      A missing prime meant that we were considering the wrong
      type in the GHCi debugger, when doing :force on multiple
      arguments (issue #17431).
      
      The fix is trivial.
      1f98e47d
    • Ben Gamari's avatar
      testsuite: Mark T16219 as fragile on Windows · 011f3121
      Ben Gamari authored
      As noted in #17452, this test produces very long file paths which
      exceed the Windows MAX_PATH limitation. Mark the test as fragile for not
      until we can come up with a better solution.
      011f3121
    • Ben Gamari's avatar
      testsuite: Drop T7995 · b62ca659
      Ben Gamari authored
      This test is quite sensitive to the build configuration as it requires that ghc
      have unfoldings, which isn't true in the quick build flavours. I considered
      various options to make the test more robust but none of them seemed
      particularly appealing. Moreover, Simon PJ was a bit skeptical of the value of
      the test to begin with and I strongly suspect that any regression in #7995
      would be accompanied by failures in our other compiler performance tests.
      
      Closes #17399.
      b62ca659
    • Ben Gamari's avatar
      testsuite: Fix putStrLn in saks028 · a9b14790
      Ben Gamari authored
      Bizarrely, `saks028` previously failed reliably, but only on Windows
      (#17450). The test would exit with a zero exit code but simply didn't
      emit the expected text to stderr.
      
      I believe this was due to the fact that the test used `putStrLn`,
      resulting in the output ending up on stdout. This worked on other
      platforms since (apparently) we redirect stdout to stderr when
      evaluating splices. However, on Windows it seems that the redirected
      output wasn't flushed as it was on other platforms.
      
      Anyways, it seems like the right thing to do here is to be explicit
      about our desire for the output to end up on stderr.
      
      Closes #17450.
      a9b14790
    • Ben Gamari's avatar
      testsuite: Ignore stderr in PartialDownsweep · f73fbd2d
      Ben Gamari authored
      As described in #17449, PartialDownsweep is currently fragile due to its
      dependence on the error messages produced by the C preprocessor. To eliminate
      this dependence we simply ignore stderr output, instead relying on the fact
      that the test will exit with a non-zero exit code on failure.
      
      Fixes #17449.
      f73fbd2d
    • Ben Gamari's avatar
      testsuite: Remove redundant cleaning logic from T16511 · 1f871e70
      Ben Gamari authored
      The GHCi script for T16511 had some `rm` commands to clean up output
      from previous runs. This should be harmless since stderr was redirected
      to /dev/null; however, it seems that this redirection doesn't work on
      Windows (perhaps because GHCi uses `cmd` to execute the command-line;
      I'm not sure). I tried to fix it but was unable to find a sensible
      solution.
      
      Regardless, the cleaning logic is quite redundant now that we run each
      test in a hermetic environment. Let's just remove it.
      1f871e70
    • Ben Gamari's avatar
      testsuite: Mark T16219 as unbroken · c1f1f3f9
      Ben Gamari authored
      This was previously broken due to #16386 yet it passes for me locally.
      c1f1f3f9
    • Ben Gamari's avatar
      testsuite: Mark T11627b as fragile · 411ba7ba
      Ben Gamari authored
      It was previously marked as broken due to #12236 however it passes for
      me locally while failing on CI.
      411ba7ba
    • Ben Gamari's avatar
      dcb23ec9
    • Ben Gamari's avatar
      testsuite: Fix header #include order on Windows · a50ecda6
      Ben Gamari authored
      <Rts.h> must always come first.
      a50ecda6
    • Ben Gamari's avatar
      testsuite: Skip T14931 on Windows · 7c2ce0a0
      Ben Gamari authored
      This test uses -dynamic-too, which is not supported on Windows.
      7c2ce0a0
    • Ben Gamari's avatar
      testsuite: Skip T16916 on Windows · 925fbdbb
      Ben Gamari authored
      The event manager is not supported on Windows.
      925fbdbb
  14. 08 Nov, 2019 2 commits
    • Ben Gamari's avatar
      SetLevels: Don't set context level when floating cases · 5c87ebd7
      Ben Gamari authored
      When floating a single-alternative case we previously would set the
      context level to the level where we were floating the case. However,
      this is wrong as we are only moving the case and its binders. This
      resulted in #16978, where the disrepancy caused us to
      unnecessarily abstract over some free variables of the case body,
      resulting in shadowing and consequently Core Lint failures.
      
      (cherry picked from commit a2a0e6f3)
      5c87ebd7
    • Stefan Schulze Frielinghaus's avatar
      Testsuite: Introduce req_rts_linker · 9db2e905
      Stefan Schulze Frielinghaus authored
      Some tests depend on the RTS linker. Introduce a modifier to skip such
      tests, in case the RTS linker is not available.
      9db2e905
  15. 07 Nov, 2019 1 commit
    • Ryan Scott's avatar
      Clean up TH's treatment of unary tuples (or, #16881 part two) · 708c60aa
      Ryan Scott authored
      !1906 left some loose ends in regards to Template Haskell's treatment
      of unary tuples. This patch ends to tie up those loose ends:
      
      * In addition to having `TupleT 1` produce unary tuples, `TupE [exp]`
        and `TupP [pat]` also now produce unary tuples.
      * I have added various special cases in GHC's pretty-printers to
        ensure that explicit 1-tuples are printed using the `Unit` type.
        See `testsuite/tests/th/T17380`.
      * The GHC 8.10.1 release notes entry has been tidied up a little.
      
      Fixes #16881. Fixes #17371. Fixes #17380.
      708c60aa
  16. 05 Nov, 2019 2 commits
    • Sebastian Graf's avatar
      Check EmptyCase by simply adding a non-void constraint · 1593debf
      Sebastian Graf authored
      We can handle non-void constraints since !1733, so we can now express
      the strictness of `-XEmptyCase` just by adding a non-void constraint
      to the initial Uncovered set.
      
      For `case x of {}` we thus check that the Uncovered set `{ x | x /~ ⊥ }`
      is non-empty. This is conceptually simpler than the plan outlined in
       #17376, because it talks to the oracle directly.
      
      In order for this patch to pass the testsuite, I had to fix handling of
      newtypes in the pattern-match checker (#17248).
      
      Since we use a different code path (well, the main code path) for
      `-XEmptyCase` now, we apparently also handle #13717 correctly.
      There's also some dead code that we can get rid off now.
      
      `provideEvidence` has been updated to provide output more in line with
      the old logic, which used `inhabitationCandidates` under the hood.
      
      A consequence of the shift away from the `UncoveredPatterns` type is
      that we don't report reduced type families for empty case matches,
      because the pretty printer is pure and only knows the match variable's
      type.
      
      Fixes #13717, #17248, #17386
      1593debf
    • Peter Trommler's avatar
      testsuite: skip test requiring RTS linker on PowerPC · 487ede42
      Peter Trommler authored
      The RTS linker is not available on 64-bit PowerPC. Instead of
      marking tests that require the RTS linker as broken on PowerPC
      64-bit skip the respective tests on all platforms where the
      RTS linker or a statically linked external interpreter is not
      available.
      
      Fixes #11259
      487ede42
  17. 03 Nov, 2019 1 commit
    • Sebastian Graf's avatar
      Separate `LPat` from `Pat` on the type-level · 182b1199
      Sebastian Graf authored
      Since the Trees That Grow effort started, we had `type LPat = Pat`.
      This is so that `SrcLoc`s would only be annotated in GHC's AST, which is
      the reason why all GHC passes use the extension constructor `XPat` to
      attach source locations. See #15495 for the design discussion behind
      that.
      
      But now suddenly there are `XPat`s everywhere!
      There are several functions which dont't cope with `XPat`s by either
      crashing (`hsPatType`) or simply returning incorrect results
      (`collectEvVarsPat`).
      
      This issue was raised in #17330. I also came up with a rather clean and
      type-safe solution to the problem: We define
      
      ```haskell
      type family XRec p (f :: * -> *) = r | r -> p f
      type instance XRec (GhcPass p) f = Located (f (GhcPass p))
      type instance XRec TH          f =          f p
      type LPat p = XRec p Pat
      ```
      
      This is a rather modular embedding of the old "ping-pong" style, while
      we only pay for the `Located` wrapper within GHC. No ping-ponging in
      a potential Template Haskell AST, ...
      182b1199