1. 22 Aug, 2017 5 commits
    • Ryan Scott's avatar
      Make the Read instance for Proxy (and friends) ignore precedence · 8fd95999
      Ryan Scott authored
      The `Read` instance for `Proxy`, as well as a handful of other data
      types in `base` which only have a single constructor, are doing something
      skeevy: they're requiring that they be surrounded by parentheses if the parsing
      precedence is sufficiently high. This means that `"Thing (Proxy)"` would parse,
      but not `"Thing Proxy"`. But the latter really ought to parse, since there's no
      need to surround a single constructor with parentheses. Indeed, that's the
      output of `show (Thing Proxy)`, so the current `Read` instance for `Proxy`
      violates `read . show = id`.
      The simple solution is to change `readParen (d > 10)` to `readParen False` in
      the `Read` instance for `Proxy`. But given that a derived `Read` instance would
      essentially accomplish the same thing, but with even fewer characters, I've
      opted to just replace the hand-rolled `Read` instance with a derived one.
      Test Plan: make test TEST=T12874
      Reviewers: ekmett, austin, hvr, goldfire, bgamari
      Reviewed By: bgamari
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #12874
      Differential Revision: https://phabricator.haskell.org/D3871
    • Ryan Scott's avatar
      Revise function arity mismatch errors involving TypeApplications · 84760976
      Ryan Scott authored
      Currently, whenever you apply a function to too many arguments and
      some of those arguments happen to be visible type applications, the error
      message that GHC gives is rather confusing. Consider the message you receive
      when typechecking `id @Int 1 2`:
      The function `id` is applied to three arguments,
      but its type `Int -> Int` has only one
      This is baffling, since the two lines treat the visible type argument `@Int`
      differently. The top line ("applied to three arguments") includes `@Int`,
      whereas the bottom line ("has only one") excludes `@Int` from consideration.
      There are multiple ways one could fix this, which I explain in an addendum to
      `Note [Herald for matchExpectedFunTys]`. The approach adopted here is to change
      the herald of this error message to include visible type arguments, and to
      avoid counting them in the "applied to n arguments" part of the error. The end
      result is that the new error message for `id @Int 1 2` is now:
      The expression `id @Int` is applied to two arguments,
      but its type `Int -> Int` has only one
      Test Plan: make test TEST=T13902
      Reviewers: goldfire, austin, bgamari
      Reviewed By: goldfire
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #13902
      Differential Revision: https://phabricator.haskell.org/D3868
    • Ryan Scott's avatar
      Fix #13885 by freshening reified GADT constructors' universal tyvars · 79b259ae
      Ryan Scott authored
      When reifying GADTs with Template Haskell, the universally quantified
      type variables were being reused across both the data type head and the
      constructors' type signatures. This had the annoying effect of causing sets
      of differently scoped variables to have the same uniques. To avoid this, we
      now freshen the universal tyvars before reifying the constructors so as to
      ensure they have distinct uniques.
      Test Plan: make test TEST=T13885
      Reviewers: goldfire, austin, bgamari, simonpj
      Reviewed By: simonpj
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #13885
      Differential Revision: https://phabricator.haskell.org/D3867
    • Ryan Scott's avatar
      Fix #14114 by checking for duplicate vars on pattern synonym RHSes · a89bb806
      Ryan Scott authored
      Because we weren't checking for duplicate variables on the right-hand
      sides of pattern synonyms, bogus definitions like this one passed the renamer:
      pattern Foo a <- (a,a)
      Luckily, the fix is simple.
      Test Plan: make test TEST=T14114
      Reviewers: mpickering, austin, bgamari, simonpj
      Reviewed By: simonpj
      Subscribers: simonpj, rwbarton, thomie
      GHC Trac Issues: #14114
      Differential Revision: https://phabricator.haskell.org/D3866
    • Ryan Scott's avatar
      Fix #14125 by normalizing data family instances more aggressively · 6982ee99
      Ryan Scott authored
      Commit 3540d1e1 inadvertently broke
      the ability for newtype instances to be used as marshallable types in FFI
      declarations. The reason is a bit silly: an extra check was added for type
      synonyms with no type families on the RHS in `normalise_tc_app`, but this check
      would only skip over type families, not //data// families, since the predicate
      being used was `not . isTypeFamilyCon`.
      The fix is simple: just use `not . isFamilyCon` instead so that data families
      are also skipped by this check.
      Test Plan: make test TEST=T14125
      Reviewers: goldfire, simonpj, austin, bgamari
      Reviewed By: simonpj
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #14125
      Differential Revision: https://phabricator.haskell.org/D3865
  2. 21 Aug, 2017 1 commit
  3. 19 Aug, 2017 6 commits
    • Ben Gamari's avatar
      Revert "Add strict variant of iterate" · 1cdceb9f
      Ben Gamari authored
      This was not ready to commit.
      This reverts commit 8e5b6ec6.
    • Tamar Christina's avatar
      Correct incorrect free in PE linker · ee2e9ece
      Tamar Christina authored
      The big-obj support (D3523) had introduced an early free on
      the info structure. Because the pointer is not NULL'd
      and the default of all the utility functions was to the
      standard object format, it all kept working.
      The one big-obj test that exists was subjected to a timing issue.
      usually the test ran quickly enough that the allocator hasn't
      had time to reclaim the memory yet, so it still passed.
      This corrects it. Also as it so happens, static LLVM libraries
      from mingw-w64 are compiled using big-obj.
      Test Plan: ./validate
      Reviewers: austin, bgamari, erikd, simonmar
      Reviewed By: bgamari
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #13815, #13093
      Differential Revision: https://phabricator.haskell.org/D3862
    • Ben Gamari's avatar
      Add strict variant of iterate · 8e5b6ec6
      Ben Gamari authored
      This closes the nearly-eight-year-old #3474.
    • patrickdoc's avatar
      users_guide: Convert mkUserGuidePart generation to a Sphinx extension · cf8ab1ce
      patrickdoc authored
      This removes all dependencies the users guide had on `mkUserGuidePart`.
      The generation of the flag reference table and the various pieces of the
      man page is now entirely contained within the Spinx extension
      `flags.py`. You can see the man page generation on the orphan page
      The extension works by collecting all of the meta-data attached to the
      `ghc-flag` directives and then formatting and displaying it at
      `flag-print` directives. There is a single printing directive that can
      be customized with two options, what format to display (table, list, or
      block of flags) and an optional category to limit the output to
      (verbosity, warnings, codegen, etc.).
      New display formats can be added by creating a function
      `generate_flag_xxx` (where `xxx` is a description of the format) which
      takes a list of flags and a category and returns a new `xxx`. Then just
      add a reference in the dispatch table `handlers`. That display can now
      be run by passing `:type: xxx` to the `flag-print` directive.
      `flags.py` contains two maps of settings that can be adjusted. The first
      is a canonical list of flag categories, and the second sets default
      categories for files.
      The only functionality that Sphinx could not replace was the
      `what_glasgow_exts_does.gen.rst` file. `mkUserGuidePart` actually just
      reads the list of flags from `compiler/main/DynFlags.hs` which Sphinx
      cannot do. As the flag is deprecated, I added the list as a static file
      which can be updated manually.
      Additionally, this patch updates every single documented flag with the
      data from `mkUserGuidePart` to generate the reference table.
      Fixes #11654 and, incidentally, #12155.
      Reviewers: austin, bgamari
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #11654, #12155
      Differential Revision: https://phabricator.haskell.org/D3839
    • Ben Gamari's avatar
      Enable -Wcpp-undef for GHC and runtime system · 6267d8c9
      Ben Gamari authored
      This gets us much of the benefit of enabling it globally, which avoiding
      (at least for now) the pain of making the core libraries build as well.
      See #13636.
      Test Plan: Validate
      Reviewers: erikd, austin
      Subscribers: rwbarton, thomie
      GHC Trac Issues: #13636
      Differential Revision: https://phabricator.haskell.org/D3517
    • quchen's avatar
      Doctests for Data.Tuple · f50e30e0
      quchen authored
  4. 18 Aug, 2017 6 commits
  5. 17 Aug, 2017 21 commits
  6. 16 Aug, 2017 1 commit