1. 20 Apr, 2018 4 commits
    • Tobias Dammers's avatar
      Caching coercion roles in NthCo and coercionKindsRole refactoring · 2fbe0b51
      Tobias Dammers authored
      While addressing nonlinear behavior related to coercion roles,
      particularly `NthCo`, we noticed that coercion roles are recalculated
      often even though they should be readily at hand already in most cases.
      This patch adds a `Role` to the `NthCo` constructor so that we can cache
      them rather than having to recalculate them on the fly.
      https://ghc.haskell.org/trac/ghc/ticket/11735#comment:23 explains the
      approach.
      
      Performance improvement over GHC HEAD, when compiling Grammar.hs (see below):
      
      GHC 8.2.1:
      ```
      ghc Grammar.hs  176.27s user 0.23s system 99% cpu 2:56.81 total
      ```
      
      before patch (but with other optimizations applied):
      ```
      ghc Grammar.hs -fforce-recomp  175.77s user 0.19s system 100% cpu 2:55.78 total
      ```
      
      after:
      ```
      ../../ghc/inplace/bin/ghc-stage2 Grammar.hs  10.32s user 0.17s system 98% cpu 10.678 total
      ```
      
      Introduces the following regressions:
      
      - perf/compiler/parsing001 (possibly false positive)
      - perf/compiler/T9872
      - perf/compiler/haddock.base
      
      Reviewers: goldfire, bgamari, simonpj
      
      Reviewed By: simonpj
      
      Subscribers: rwbarton, thomie, carter
      
      GHC Trac Issues: #11735
      
      Differential Revision: https://phabricator.haskell.org/D4394
      2fbe0b51
    • Ryan Scott's avatar
      Bump transformers submodule · b41a42e3
      Ryan Scott authored
      This brings in a commit which migrates Contravariant instances from
      base to transformers.
      b41a42e3
    • Azel's avatar
      Fixes isAlphaNum re. isAlpha/isNumber and doc fix (trac issue #10412) · a26983a3
      Azel authored
      Corrects the inconsistency between Data.Char.isAlphaNum,
      Data.Char.isAlpha and Data.Char.isNumber. Indeed, isAlphaNum was
      returning True not only when isAlpha or isNumber returned True but
      also when isMark did. The selectors for the Mn, Mc and Me general
      categories where removed from the macro generating u_iswalnum in
      ubconfc.
      
      Also, Data.Char.isAlphaNum's documentation was changed to state that
      isAlphaNum returns true not only for Unicode number digits but for
      Unicode numbers in general in Unicode.hs.
      Signed-off-by: Azel's avatarARJANEN Loïc Jean David <arjanen.loic@gmail.com>
      
      Reviewers: hvr, ekmett, lelf, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie, carter
      
      GHC Trac Issues: #10412
      
      Differential Revision: https://phabricator.haskell.org/D4593
      a26983a3
    • Ryan Scott's avatar
      Lint types in newFamInst · 257c13d8
      Ryan Scott authored
      We weren't linting the types used in `newFamInst`, which
      might have been why #15012 went undiscovered for so long. Let's fix
      that.
      
      One has to be surprisingly careful with expanding type synonyms in
      `lintType`, since in the offending program (simplified):
      
      ```lang=haskell
      type FakeOut a = Int
      
      type family TF a
      type instance TF Int = FakeOut a
      ```
      
      If one expands type synonyms, then `FakeOut a` will expand to
      `Int`, which masks the issue (that `a` is unbound). I added an
      extra Lint flag to configure whether type synonyms should be
      expanded or not in Lint, and disabled this when calling `lintTypes`
      from `newFamInst`.
      
      As evidence that this works, I ran it on the offending program
      from #15012, and voilà:
      
      ```
      $ ghc3/inplace/bin/ghc-stage2 Bug.hs -dcore-lint
      [1 of 1] Compiling Foo              ( Bug.hs, Bug.o )
      ghc-stage2: panic! (the 'impossible' happened)
        (GHC version 8.5.20180417 for x86_64-unknown-linux):
              Core Lint error
        <no location info>: warning:
            In the type ‘... (Rec0 (FakeOut b_a1Qt))))’
            @ b_a1Qt is out of scope
      ```
      
      Test Plan: make test TEST=T15057
      
      Reviewers: simonpj, goldfire, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie, carter
      
      GHC Trac Issues: #15057
      
      Differential Revision: https://phabricator.haskell.org/D4611
      257c13d8
  2. 19 Apr, 2018 13 commits
    • Ben Gamari's avatar
      boot: Fix computation of TOP · 8fa688a8
      Ben Gamari authored
      Test Plan: Run `./boot`, check to make sure that
      `libraries/ghc-prim/GNUmakefile` is sane
      
      Subscribers: thomie, carter, sjakobi
      
      Differential Revision: https://phabricator.haskell.org/D4580
      8fa688a8
    • Ben Gamari's avatar
      configure: Use -Werror to check for existence of -no-pie · cbd73bbb
      Ben Gamari authored
      Clang throws a warning instead of an error when it is passed -no-pie,
      
          clang: warning: argument unused during compilation: '-nopie'
          [-Wunused-command-line-argument]
      
      Consequently configure concludes that it supports -no-pie. However, this
      will fail when used with -Werror. The solution is to simply use -Werror
      in the configure check.
      
      Thanks to @goldfire for reporting this.
      
      Reviewers: hvr
      
      Subscribers: thomie, carter, goldfire
      
      Differential Revision: https://phabricator.haskell.org/D4557
      cbd73bbb
    • Ben Gamari's avatar
      parsec: Make version hack compatible with Windows · 3c3e7310
      Ben Gamari authored
      Fixes D4609 on Windows by bumping parsec submodule.
      3c3e7310
    • Alp Mestanogullari's avatar
      testsuite: Fix `./validate --slow` · d9d80151
      Alp Mestanogullari authored
      This fixes all unexpected passes and unexpected failures from a
      `./validate --slow` run I did last week. I commented on many
      tickets and created a few more as I was going through the failing
      tests. A summary of the entire process is available at:
      
        https://gist.github.com/alpmestan/c371840968f086c8dc5b56af8325f0a9
      
      This is part of an attempt to have `./validate --slow` pass,
      tracked in #14890. Another patch will be necessary for the unexpected
      stats failures.
      
      Test Plan: ./validate --slow (not green yet)
      
      Reviewers: bgamari, simonmar
      
      Subscribers: thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D4546
      d9d80151
    • Ryan Scott's avatar
      Bump base to version 4.12.0.0 · 8f19ecc9
      Ryan Scott authored
      Summary: Bumps several submodules.
      
      Test Plan: ./validate
      
      Reviewers: hvr, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie, carter
      
      GHC Trac Issues: #15018
      
      Differential Revision: https://phabricator.haskell.org/D4609
      8f19ecc9
    • Ryan Scott's avatar
      Fix #15012 with a well-placed use of Any · b08a6d75
      Ryan Scott authored
      Previously, derived `Generic1` instances could have associated `Rep1`
      type family instances with unbound variables, such as in the following
      example:
      
      ```lang=haskell
      data T a = MkT (FakeOut a) deriving Generic1
      type FakeOut a = Int
      
      ==>
      
      instance Generic1 T where
        type Rep1 T = ... (Rec0 (FakeOut a))
      ```
      
      Yikes! To avoid this, we simply map the last type variable in a
      derived `Generic1` instance to `Any`.
      
      Test Plan: make test TEST=T15012
      
      Reviewers: bgamari
      
      Reviewed By: bgamari
      
      Subscribers: simonpj, thomie, carter
      
      GHC Trac Issues: #15012
      
      Differential Revision: https://phabricator.haskell.org/D4602
      b08a6d75
    • Tao He's avatar
      Better error message for empty character literal, for Trac #13450. · cac8be61
      Tao He authored
      For empty character literal, the `''`, report error message properly
      rather than just throw a "parser error" with wrong error location.
      
      Test Plan: make test TEST="T13450 T13450TH"
      
      Reviewers: goldfire, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie, mpickering, carter
      
      GHC Trac Issues: #13450
      
      Differential Revision: https://phabricator.haskell.org/D4594
      cac8be61
    • Ömer Sinan Ağacan's avatar
      Add a test for #14815: · f7f567d5
      Ömer Sinan Ağacan authored
      Because the program doesn't have any binders that -XStrict can make
      strict, the desugarer output should be identical when it's compiled with
      and without -XStrict. This wasn't the case with GHC 8.2.2, but
      apparently it was fixed some time between 8.2.2 and 8.4.1. We now add a
      test case to make sure it stays fixed.
      
      Reviewers: bgamari
      
      Reviewed By: bgamari
      
      Subscribers: simonpj, rwbarton, thomie, carter
      
      GHC Trac Issues: #14815
      
      Differential Revision: https://phabricator.haskell.org/D4531
      f7f567d5
    • Sergei Trofimovich's avatar
      rts: fix format arguments for debugBelch calls on 32-bit systems · 48b88421
      Sergei Trofimovich authored
      This change fixes build failure like this:
      ```
        rts/Stats.c:1467:14: error:
           error: format '%u' expects argument of type 'unsigned int',
               but argument 4 has type 'long unsigned int' [-Werror=format=]
             debugBelch("%51s%9" FMT_Word " %9" FMT_Word "\n",
                        ^~~~~~~~
                        "",tot_live*sizeof(W_),tot_slop*sizeof(W_));
                                               ~~~~~~~~~~~~~~~~~~~
      ```
      
      The fix is to cast sizeof() result to Word (W_).
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      
      Test Plan: build for 32-bit target
      
      Reviewers: bgamari, erikd, simonmar
      
      Reviewed By: simonmar
      
      Subscribers: thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D4608
      48b88421
    • Ben Gamari's avatar
      users-guide: Override mathjax_path · 803178a5
      Ben Gamari authored
      The Mathjax CDN no longer exists. Use CDNJS instead.
      
      See #15006.
      
      Test Plan: Build HTML users guide, see whether math is rendered.
      
      Reviewers: alpmestan
      
      Reviewed By: alpmestan
      
      Subscribers: thomie, carter
      
      GHC Trac Issues: #15006
      
      Differential Revision: https://phabricator.haskell.org/D4603
      803178a5
    • Ben Gamari's avatar
      Add a test case from the nested CPR work · 19ddd044
      Ben Gamari authored
      Reviewers: bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie, carter
      
      Differential Revision: https://phabricator.haskell.org/D4565
      19ddd044
    • Ryan Scott's avatar
      Bump unix submodule to version 2.8.0.0 · 2fdfe056
      Ryan Scott authored
      Summary: Requires bumping several submodules.
      
      Test Plan: ./validate
      
      Reviewers: hvr, bgamari
      
      Subscribers: thomie, carter
      
      GHC Trac Issues: #15042
      
      Differential Revision: https://phabricator.haskell.org/D4604
      2fdfe056
    • Ryan Scott's avatar
      Fix #14710 with more validity checks during renaming · 447d1264
      Ryan Scott authored
      Summary:
      #14710 revealed two unfortunate regressions related to kind
      polymorphism that had crept in in recent GHC releases:
      
      1. While GHC was able to catch illegal uses of kind polymorphism
         (i.e., if `PolyKinds` wasn't enabled) in limited situations, it
         wasn't able to catch kind polymorphism of the following form:
      
      ```lang=haskell
      f :: forall a. a -> a
      f x = const x g
        where
          g :: Proxy (x :: a)
          g = Proxy
      ```
      
      Note that the variable `a` is being used as a kind variable in the
      type signature of `g`, but GHC happily accepts it, even without
      the use of `PolyKinds`.
      
      2. If you have `PolyKinds` (but not `TypeInType`) enabled, then GHC
         incorrectly accepts the following definition:
      
      ```lang=haskell
      f :: forall k (a :: k). Proxy a
      f = Proxy
      ```
      
      Even though `k` is explicitly bound and then later used as a kind
      variable within the same telescope.
      
      This patch fixes these two bugs as follows:
      
      1. Whenever we rename any `HsTyVar`, we check if the following three
         criteria are met:
      
         (a) It's a type variable
         (b) It's used at the kind level
         (c) `PolyKinds` is not enabled
      
         If so, then we have found an illegal use of kind polymorphism, so
         throw an error.
      
         This check replaces the `checkBadKindBndrs` function, which could
         only catch illegal uses of kind polymorphism in very limited
         situations (when the bad kind variable happened to be implicitly
         quantified in the same type signature).
      
      2. In `extract_hs_tv_bndrs`, we must error if `TypeInType` is not
         enabled and either of the following criteria are met:
      
         (a) An explicitly bound type variable is used in kind position
             in the body of a `forall` type.
         (b) An explicitly bound type variable is used in kind position
             in the kind of a bound type variable in a `forall` type.
      
         `extract_hs_tv_bndrs` was checking (a), but not (b). Easily fixed.
      
      Test Plan: ./validate
      
      Reviewers: goldfire, simonpj, bgamari, hvr
      
      Reviewed By: simonpj
      
      Subscribers: thomie, carter
      
      GHC Trac Issues: #14710
      
      Differential Revision: https://phabricator.haskell.org/D4554
      447d1264
  3. 17 Apr, 2018 5 commits
  4. 16 Apr, 2018 3 commits
  5. 13 Apr, 2018 15 commits