1. 31 Jul, 2017 8 commits
    • Simon Peyton Jones's avatar
      Use field names for all uses of datacon Match · 4fdc5234
      Simon Peyton Jones authored
      This is refactoring only... elimiante all positional uses
      of the data constructor Match in favour of field names.
      
      No change in behaviour.
      4fdc5234
    • Simon Peyton Jones's avatar
      Remove redundant goop · 7f2dee8e
      Simon Peyton Jones authored
      See comment:22 in Trac #13594
      7f2dee8e
    • Simon Peyton Jones's avatar
      Reject top-level banged bindings · af89d687
      Simon Peyton Jones authored
      Bizarrely, we were not rejecting
        !x = e
      
      Fix:
      
      * In the test in DsBinds.dsTopLHsBinds, use isBangedHsBind, not
        isBangedPatBind.  (Indeed the latter dies altogther.)
      
      * Implement isBangedHsBind in HsUtils;
        be sure to handle AbsBinds
      
      All this was shown up by Trac #13594
      af89d687
    • Simon Peyton Jones's avatar
      Do a bit more CSE · 3ab342eb
      Simon Peyton Jones authored
      I discovered that in
      
         let x = MkT y in ....(MKT y |> co)....
      
      we weren't CSE'ing the (MkT y).  The fix is easy.
      3ab342eb
    • Simon Peyton Jones's avatar
      Improve the desugaring of -XStrict · 46368868
      Simon Peyton Jones authored
      Trac #14035 showed that -XStrict was generating some TERRIBLE
      desugarings, espcially for bindings with INLINE pragmas. Reason: with
      -XStrict, all AbsBinds (even for non-recursive functions) went via the
      general-case deguaring for AbsBinds, namely "generate a tuple and
      select from it", even though in this case there was only one variable
      in the tuple.  And that in turn interacts terribly badly with INLINE
      pragmas.
      
      This patch cleans things up:
      
      * I killed off AbsBindsSig completely, in favour of a boolean flag
        abs_sig in AbsBinds.  See Note [The abs_sig field of AbsBinds]
      
        This allowed me to delete lots of code; and instance-method
        declarations can enjoy the benefits too.  (They could have
        before, but no one had changed them to use AbsBindsSig.)
      
      * I refactored all the AbsBinds handling in DsBinds into a new
        function DsBinds.dsAbsBinds.  This allowed me to handle the
        strict case uniformly
      46368868
    • Simon Peyton Jones's avatar
      Refactoring around FunRhs · 2535a671
      Simon Peyton Jones authored
      * Clarify the comments around the mc_strictness field of FunRhs
      * Use record field names consistently for FunRhs
      2535a671
    • Richard Eisenberg's avatar
      Clarify comment about data family arities · c6d4219a
      Richard Eisenberg authored
      as requested in #14045.
      
      [skip ci] comments only
      c6d4219a
    • habibalamin's avatar
      Allow Windows to set blank environment variables · 49e334c8
      habibalamin authored
      Test Plan: ./validate on harbormaster
      
      Reviewers: austin, hvr, bgamari, erikd, Phyx
      
      Reviewed By: Phyx
      
      Subscribers: Phyx, rwbarton, thomie
      
      GHC Trac Issues: #12494
      
      Differential Revision: https://phabricator.haskell.org/D3726
      49e334c8
  2. 30 Jul, 2017 2 commits
  3. 29 Jul, 2017 4 commits
    • Ryan Scott's avatar
      Follow-up to #13887, for promoted infix constructors · 7089dc2f
      Ryan Scott authored
      Summary:
      Correct a couple more spots in the TH pretty-printer by applying the
      appropriate parenthesization for infix names. Fixes #13887 (again).
      
      Test Plan: make test TEST=T13887
      
      Reviewers: austin, bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13887
      
      Differential Revision: https://phabricator.haskell.org/D3802
      7089dc2f
    • Ryan Scott's avatar
      Add regression test for #14055 · f839b9de
      Ryan Scott authored
      f839b9de
    • Richard Eisenberg's avatar
      Fix #14045 by omitting an unnecessary check · d1ef223c
      Richard Eisenberg authored
      Previously, we checked the number of patterns in a data instances
      for all data families whose kind did not end in a kind variable.
      But, of course, undersaturating instances can happen even without
      the kind ending in a kind variable. So I've omitted the arity check.
      Data families aren't as particular about their arity as type families
      are (because data families can be undersaturated). Still, this change
      degrades error messages when instances don't have the right arity;
      now, instead of reporting a simple mismatch in the number of patterns,
      GHC reports kind errors. The new errors are fully accurate, but perhaps
      not as easy to work with. Still, with the new flexibility of allowing
      data family instances with varying numbers of patterns, I don't see
      a better way.
      
      This commit also improves source fidelity in some error messages,
      requiring more changes than really are necessary. But without these
      changes, error messages around mismatched associated instance heads
      were poor.
      
      test cases: indexed-types/should_compile/T14045,
                  indexed-types/should_fail/T14045a
      d1ef223c
    • Sven Tennie's avatar
      Add '<&>' operator to Data.Functor. '<&>' calls '<$>' with flipped arguments. · 9cfabbb5
      Sven Tennie authored
      This was proposed by David Feuer
      (https://mail.haskell.org/pipermail/libraries/2016-August/027293.html)
      and solves #14029.
      
      The implementation is a copy of the '<&>' operator in Control.Lens.Lens.
      
      Add tests for following Data.Functor operators: '<$>', '<&>', '<$' and '$>'.
      
      '<&>' was added for solving #14029. '<$>', '<$' and '$>' were probably
      untested.
      
      Reviewers: austin, hvr, bgamari, RyanGlScott
      
      Reviewed By: RyanGlScott
      
      Subscribers: RyanGlScott, rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3800
      9cfabbb5
  4. 28 Jul, 2017 22 commits
    • Ben Gamari's avatar
      Ensure that GHC.Stack.callStack doesn't fail · 84f8e862
      Ben Gamari authored
      Test Plan: Validate, ensure the `f7` program of `IPLocation` doesn't
      crash.
      
      Reviewers: gridaphobe, austin, hvr
      
      Reviewed By: gridaphobe
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14028
      
      Differential Revision: https://phabricator.haskell.org/D3795
      84f8e862
    • Andreas Klebinger's avatar
      Add rtsopts ignore and ignoreAll. · d75bba85
      Andreas Klebinger authored
      These ignore commandline arguments for ignore and commandline as well as
      GHCRTS arguments for ignoreAll. Passing RTS flags given on the command
      line along to the program by simply skipping processing of these flags
      by the RTS.
      
      This fixes #12870.
      
      Test Plan: ./validate
      
      Reviewers: austin, hvr, bgamari, erikd, simonmar
      
      Reviewed By: simonmar
      
      Subscribers: Phyx, rwbarton, thomie
      
      GHC Trac Issues: #12870
      
      Differential Revision: https://phabricator.haskell.org/D3740
      d75bba85
    • Edward Z. Yang's avatar
      Fix hs-boot knot-tying with record wild cards. · 9e9fb57c
      Edward Z. Yang authored
      Fixes #13710
      
      .
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: bgamari, austin, simonpj
      
      Reviewed By: simonpj
      
      Subscribers: simonpj, rwbarton, thomie
      
      GHC Trac Issues: #13710
      
      Differential Revision: https://phabricator.haskell.org/D3743
      9e9fb57c
    • Sven Tennie's avatar
      Remove unnecessary GHC option from SrcLoc · 121fee99
      Sven Tennie authored
      This was an old workaround for #5252. Fixes #13173.
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3763
      121fee99
    • Ben Gamari's avatar
      testsuite: Don't pass allow_abbrev · 0e3eacc7
      Ben Gamari authored
      This is only supported by Python 3.5 and later, which is too new for us
      to rely on.
      
      Reviewers: austin
      
      Subscribers: rwbarton, thomie, RyanGlScott
      
      GHC Trac Issues: #14050
      
      Differential Revision: https://phabricator.haskell.org/D3803
      0e3eacc7
    • Ben Gamari's avatar
      Ensure that we always link against libm · 0e3c1016
      Ben Gamari authored
      ld.gold is particularly picky that we declare all of our link
      dependencies on Nix. See #14022.
      
      Test Plan: Validate on Nix
      
      Reviewers: austin
      
      Subscribers: hvr, rwbarton, thomie
      
      GHC Trac Issues: #14022
      
      Differential Revision: https://phabricator.haskell.org/D3787
      0e3c1016
    • Ben Gamari's avatar
      configure: Ensure that user's LD setting is respected · d08b9ccd
      Ben Gamari authored
      This broke in the fix for #13541.
      d08b9ccd
    • Ben Gamari's avatar
      f134bfb8
    • Ben Gamari's avatar
      Fix lld detection if both gold and lld are found · 2974f81f
      Ben Gamari authored
      If you have ld.gold and ld.lld, then ld.gold will be selected by the
      detection logic. This patch prioritizes lld by changing the order. The
      rationale for checking lld first is that it's (right now) not part of,
      say, a default Linux distro installation and if it's available, it's
      very likely that it was installed explicitly and should be seen as a
      sign of preference. On FreeBSD LLVM is the (default) base toolchain and
      the changed order makes sense there as well, since ld.gold can be
      available in /usr/local via ports/pkg. I don't have access to macOS and
      can't say anything about their LLVM toolchain.
      
      At some point we could add a check for LD=ld.lld or LD=ld.gold as an
      optional override to explicitly select a linker.
      
      Since I cannot really remove gcc on Linux, this was the only way to
      configure GHC to use ld.lld.
      
      Reviewers: austin, hvr, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie, erikd
      
      Tags: PHID-PROJ-5azim3sqhsf7wzvlvaag
      
      Differential Revision: https://phabricator.haskell.org/D3790
      2974f81f
    • Michal Terepeta's avatar
      ByteCodeGen: use byte indexing for BCenv · dac4b9d3
      Michal Terepeta authored
      This is another change needed for #13825
      
       (also based on D38 by Simon
      Marlow).
      
      With the change, we count the stack depth in bytes (instead of words).
      We also introduce some `newtype`s to help with the change.
      
      Note that this only changes how `ByteCodeGen` works and shouldn't
      affect the generated bytecode.
      Signed-off-by: Michal Terepeta's avatarMichal Terepeta <michal.terepeta@gmail.com>
      
      Test Plan: ./validate
      
      Reviewers: bgamari, simonmar, austin, hvr
      
      Reviewed By: bgamari, simonmar
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13825
      
      Differential Revision: https://phabricator.haskell.org/D3746
      dac4b9d3
    • Moritz Angermann's avatar
      Add “BINARY_DIST_DIR” to Makefile · 274e9b27
      Moritz Angermann authored
      This allows to customize the location where binary distributions are
      placed with `make binary-dist`.
      
      E.g. using:
      ```
      BINARY_DIST_DIR=/path/to/bindists make binary-dist
      ```
      will place binary dists outside of the source tree into the given
      folder.
      
      This change falls back to ".", which is the old behaviour.
      
      Test Plan: build binary-dist
      
      Reviewers: bgamari, austin
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3798
      274e9b27
    • Ben Gamari's avatar
      testsuite: Add test for #14028 · 262bb95f
      Ben Gamari authored
      Reviewers: austin
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14028
      
      Differential Revision: https://phabricator.haskell.org/D3788
      262bb95f
    • Ben Gamari's avatar
      testsuite: Produce JUnit output · 54d3a1fd
      Ben Gamari authored
      Test Plan: Validate, try ingesting into Jenkins.
      
      Reviewers: austin
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13716
      
      Differential Revision: https://phabricator.haskell.org/D3796
      54d3a1fd
    • Jared Weakly's avatar
      Switched out optparse for argparse in runtests.py · 5e940bd3
      Jared Weakly authored
      
      
      Tangentially related to my prior work on trac ticket #12758.
      Signed-off-by: default avatarJared Weakly <jweakly@pdx.edu>
      
      Reviewers: austin, bgamari
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3792
      5e940bd3
    • Ryan Scott's avatar
      Add regression tests for #13601, #13780, #13877 · 424ecadb
      Ryan Scott authored
      Summary:
      Some recent commits happened to fix other issues:
      
      * c2417b87 fixed #13601 and #13780
      * 8e15e3d3 fixed the original program in #13877
      
      Let's add regression tests for each of these to ensure they stay fixed.
      
      Test Plan: make test TEST="T13601 T13780a T13780c T13877"
      
      Reviewers: goldfire, bgamari, austin
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13601, #13780, #13877
      
      Differential Revision: https://phabricator.haskell.org/D3794
      424ecadb
    • Ryan Scott's avatar
      Merge types and kinds in DsMeta · b3b564fb
      Ryan Scott authored
      Summary:
      Types and kinds are now the same in GHC... well, except in the code
      that involves Template Haskell, where types and kinds are given separate
      treatment. This aims to unify that treatment in the `DsMeta` module.
      
      The gist of this patch is replacing all uses of `repLKind` with `repLTy`.
      This is isn't quite as simple as one might imagine, since `repLTy` returns a
      `Core (Q Type)` (a monadic expression), whereas `repLKind` returns a
      `Core Kind` (a pure expression). This causes many awkward impedance mismatches.
      
      One option would be to change every combinator in `Language.Haskell.TH.Lib` to
      take `KindQ` as an argument instead of `Kind`. But this would be a breaking
      change of colossal proportions.
      
      Instead, this patch takes a somewhat different approach. This migrates the
      existing `Language.Haskell.TH.Lib` module to
      `Language.Haskell.TH.Lib.Internal`, and changes all `Kind`-related combinators
      in `Language.Haskell.TH.Lib.Internal` to live in `Q`. The new
      `Language.Haskell.TH.Lib` module then re-exports most of
      `Language.Haskell.TH.Lib.Internal` with the exception of the `Kind`-related
      combinators, for which it redefines them to be their current definitions (which
      don't live in `Q`). This allows us to retain backwards compatibility with
      previous `template-haskell` releases, but more importantly, it allows GHC to
      make as many changes to the `Internal` code as it wants for its purposes
      without fear of disrupting the public API.
      
      This solves half of #11785 (the other half being `TcSplice`).
      
      Test Plan: ./validate
      
      Reviewers: goldfire, austin, bgamari
      
      Reviewed By: goldfire
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #11785
      
      Differential Revision: https://phabricator.haskell.org/D3751
      b3b564fb
    • Ryan Scott's avatar
      Error eagerly after renaming failures in reifyInstances · d6186496
      Ryan Scott authored
      Summary:
      Previously, if `reifyInstances` failed to discover a `Name` during
      renaming, it would blindy charge into typechecking, at which point GHC would
      become very confused at the absence of that `Name` and throw an internal error.
      A simple workaround is to fail eagerly after renaming errors.
      
      Test Plan: make test TEST=T13837
      
      Reviewers: goldfire, austin, bgamari, simonpj
      
      Reviewed By: simonpj
      
      Subscribers: simonpj, rwbarton, thomie
      
      GHC Trac Issues: #13837
      
      Differential Revision: https://phabricator.haskell.org/D3793
      d6186496
    • Simon Peyton Jones's avatar
      Add DebugCallStack to piResultTy · ad0037ea
      Simon Peyton Jones authored
      This was provoked by an ASSERT failure when debugging #14038,
      but it's a godo idea anyway.
      ad0037ea
    • Simon Peyton Jones's avatar
      Do not discard insolubles in implications · 452755de
      Simon Peyton Jones authored
      Trac #14000 showed up two errors
      
      * In TcRnTypes.dropInsolubles we dropped all implications, which
        might contain the very insolubles we wanted to keep.  This was
        an outright error, and is why the out-of-scope error was actually
        lost altogether in Trac #14000
      
      * In TcSimplify.simplifyInfer, if there are definite (insoluble)
        errors, it's better to suppress the following ambiguity test,
        because the type may be bogus anyway.  See TcSimplify
        Note [Quantification with errors].  This fix seems a bit clunky,
        but it'll do for now.
      452755de
    • Simon Peyton Jones's avatar
      Fix ASSERT failure in tc269 · b1317a35
      Simon Peyton Jones authored
      This ASSERT failure (in substTy) was reported in Trac #14024.
      
      This patch gets the in-scope set right.
      
      (Does not fix tests T13822 or T13594.)
      b1317a35
    • Simon Peyton Jones's avatar
      af6d225f
    • Simon Peyton Jones's avatar
      Fix instantiation of pattern synonyms · 6b77914c
      Simon Peyton Jones authored
      In Check.hs (pattern match ovelap checking) we to figure out the
      instantiation of a pattern synonym from the type of the pattern. We
      were doing this utterly wrongly.  Trac #13768 demonstrated this
      bogosity.
      
      The fix is easy; and is described in PatSyn.hs
        Note [Pattern synonym result type]
      6b77914c
  5. 27 Jul, 2017 4 commits
    • Andreas Klebinger's avatar
      Initialize hs_init with UTF8 encoded arguments on Windows. · 7af0b906
      Andreas Klebinger authored
      Summary:
      Get utf8 encoded arguments before we call hs_init and use them
      instead of ignoring hs_init arguments. This reduces differing
      behaviour of the RTS between windows and linux and simplifies
      the code involved.
      
      A few testcases were changed to expect the same result on windows
      as on linux after the changes.
      
      This fixes #13940.
      
      Test Plan: ./validate
      
      Reviewers: austin, hvr, bgamari, erikd, simonmar, Phyx
      
      Subscribers: Phyx, rwbarton, thomie
      
      GHC Trac Issues: #13940
      
      Differential Revision: https://phabricator.haskell.org/D3739
      7af0b906
    • Richard Eisenberg's avatar
      Refactor tcInferApps. · 791947db
      Richard Eisenberg authored
      With the changes caused by the fix to #12369, it is now clearer
      how to rewrite tcInferApps and friends. This should change no
      behavior, but it does clean up a nasty corner of the type checker.
      This commit also removes some uses of substTyUnchecked.
      791947db
    • Richard Eisenberg's avatar
      Fix #12369 by being more flexible with data insts · 42392383
      Richard Eisenberg authored
      Previously, a data family's kind had to end in `Type`,
      and data instances had to list all the type patterns for the
      family. However, both of these restrictions were unnecessary:
      
      - A data family's kind can usefully end in a kind variable `k`.
        See examples on #12369.
      
      - A data instance need not list all patterns, much like how a
        GADT-style data declaration need not list all type parameters,
        when a kind signature is in place. This is useful, for example,
        here:
      
          data family Sing (a :: k)
          data instance Sing :: Bool -> Type where ...
      
      This patch also improved a few error messages, as some error
      plumbing had to be moved around.
      
      See new Note [Arity of data families] in FamInstEnv for more
      info.
      
      test case: indexed-types/should_compile/T12369
      42392383
    • Richard Eisenberg's avatar
      Fix #12176 by being a bit more careful instantiating. · 1696dbf4
      Richard Eisenberg authored
      Previously, looking up a TyCon that said "no" to mightBeUnsaturated
      would then instantiate all of its invisible binders. But this is
      wrong for vanilla type synonyms, whose RHS kind might legitimately
      start with invisible binders. So a little more care is taken now,
      only to instantiate those invisible binders that need to be (so that
      the TyCon isn't unsaturated).
      1696dbf4