1. 02 Jun, 2017 9 commits
    • Ryan Scott's avatar
      Use lengthIs and friends in more places · a786b136
      Ryan Scott authored
      While investigating #12545, I discovered several places in the code
      that performed length-checks like so:
      
      ```
      length ts == 4
      ```
      
      This is not ideal, since the length of `ts` could be much longer than 4,
      and we'd be doing way more work than necessary! There are already a slew
      of helper functions in `Util` such as `lengthIs` that are designed to do
      this efficiently, so I found every place where they ought to be used and
      did just that. I also defined a couple more utility functions for list
      length that were common patterns (e.g., `ltLength`).
      
      Test Plan: ./validate
      
      Reviewers: austin, hvr, goldfire, bgamari, simonmar
      
      Reviewed By: bgamari, simonmar
      
      Subscribers: goldfire, rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3622
      a786b136
    • Ryan Scott's avatar
      GHC.Stats cleanup · 811a2986
      Ryan Scott authored
      This does two things:
      
      * The `RtsTime` type wasn't exported, but it is used as the type of
        several record fields. Let's export it and give it some documentation.
      * Neither `RTSStats` nor `GCDetails` have `Read` or `Show` instances,
        but `GCStats` does! Let's fix this discrepancy.
      
      Reviewers: austin, hvr, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: goldfire, rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3625
      811a2986
    • Ryan Scott's avatar
      Make GHCi work when RebindableSyntax is enabled · 2abe54e1
      Ryan Scott authored
      Previously, we were running some blocks of code at the start of every
      GHCi sessions which use do-notation, something which doesn't work well
      if you start GHCi with the `-XRebindableSyntax` flag on. This tweaks the
      code to avoid the use of do-notation so that `-XRebindableSyntax` won't
      reject it.
      
      Test Plan: make test TEST=T13385
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13385
      
      Differential Revision: https://phabricator.haskell.org/D3621
      2abe54e1
    • Ryan Scott's avatar
      Remove references to static flags in flag reference · bf775e9d
      Ryan Scott authored
      A follow-up to #8440 (Ditch static flags). There are still some
      lingering references to static flags in the flag reference, so let's
      modify those references accordingly.
      
      Test Plan: Build the documentation
      
      Reviewers: bgamari, austin
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3615
      bf775e9d
    • Ryan Scott's avatar
      Add a flag reference entry for -XTypeInType · d0fb0df3
      Ryan Scott authored
      Test Plan: Read it
      
      Reviewers: bgamari, austin
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13762
      
      Differential Revision: https://phabricator.haskell.org/D3614
      d0fb0df3
    • Tamar Christina's avatar
      Better import library support for Windows · 93489cd3
      Tamar Christina authored
      The import library support added for 7.10.3 was only a partial one.
      This support was predicated on using file extensions to determine
      whether or not a library was an import library. It also couldn't handle
      libraries with multiple dll pointers.
      
      This is a rewrite of that patch and fully integrating it into the normal
      archive parsing and loading routines. This solves a host of issues,
      among others allowing us to finally use `-lgcc_s`.
      
      This also fixes a problem with our previous implementation, where we
      just loaded the DLL and moved on. Doing this had the potential of using
      the wrong symbol at resolve time. Say a DLL already loaded (A.dll) has
      symbol a exported (dependency of another dll perhaps).
      
      We find an import library `B.lib` explicitly defining an export of `a`.
      we load `B.dll` but this gets put after `A.dll`, at resolve time we
      would use the value from `A` instead of `B` which is what we wanted.
      
      Test Plan: ./valide and make test TEST=13606
      
      Reviewers: austin, bgamari, erikd, simonmar
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, RyanGlScott, thomie, #ghc_windows_task_force
      
      GHC Trac Issues: #13606, #12499, #12498
      
      Differential Revision: https://phabricator.haskell.org/D3513
      93489cd3
    • Ben Gamari's avatar
      aclocal: Fix regression in linker detection · 5164cce2
      Ben Gamari authored
      5ddb307e regressed autoconf's ability to
      find the linker due to a silly variable interpolation issue, causing
      segmentation faults on AArch64.
      5164cce2
    • Moritz Angermann's avatar
      [iserv] move forkIO · 35c7ea8b
      Moritz Angermann authored
      This moves the forkIO into the `startSlave` function from the
      `startSlave'` function, such that this allows consumers to call
      `forkSlave'` if they want the blocking behaviour.
      
      Reviewers: bgamari, austin
      
      Reviewed By: bgamari
      
      Subscribers: Ericson2314, ryantrinkle, rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3601
      35c7ea8b
    • Gabor Greif's avatar
      A few typos [ci skip] · 750a25f4
      Gabor Greif authored
      750a25f4
  2. 01 Jun, 2017 1 commit
  3. 31 May, 2017 1 commit
  4. 30 May, 2017 1 commit
    • niteria's avatar
      Efficient checks for stable modules · 8bfab438
      niteria authored
      With a large number of modules in a home package
      (in my case 5000) the costs of linear lookups becomes significant.
      This changes them to efficient IntMap lookups.
      
      It reduces the cost of `:reload` on unchanged source
      from 5.77s to 1.62s on my test case.
      
      I could go further and make `Linker.unload` also take a set,
      but I prefer to concentrate on one thing at a time.
      
      Test Plan: harbormaster
      
      Reviewers: simonmar, austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3611
      8bfab438
  5. 29 May, 2017 1 commit
  6. 28 May, 2017 1 commit
  7. 27 May, 2017 5 commits
  8. 26 May, 2017 8 commits
    • Ryan Scott's avatar
      Add regression test for #13758 · c8231408
      Ryan Scott authored
      c8231408
    • Ben Gamari's avatar
      Revert "Rewrite boot in Python" · 7fce4cbc
      Ben Gamari authored
      This reverts commit 0440af6a.
      Unfortunately this breaks on Windows for tiresome reasons. I'll need to
      reevaluate this.
      7fce4cbc
    • Gabor Greif's avatar
      Typos in comments [ci skip] · 19c4203f
      Gabor Greif authored
      19c4203f
    • Simon Peyton Jones's avatar
      Some tidying up of type pretty-printing · ad14efd5
      Simon Peyton Jones authored
      Triggered by the changes in #13677, I ended up doing a bit of
      refactoring in type pretty-printing.
      
      * We were using TyOpPrec and FunPrec rather inconsitently, so
        I made it consisent.
      
      * That exposed the fact that we were a bit undecided about whether
        to print
           a + b -> c + d   vs   (a+b) -> (c+d)
        and similarly
           a ~ [b] => blah  vs   (a ~ [b]) => blah
      
        I decided to make TyOpPrec and FunPrec compare equal
        (in BasicTypes), so (->) is treated as equal precedence with
        other type operators, so you get the unambiguous forms above,
        even though they have more parens.
      
        We could readily reverse this decision.
        See Note [Type operator precedence] in BasicTypes
      
      * I fixed a bug in pretty-printing of HsType where some
        parens were omitted by mistake.
      ad14efd5
    • Simon Peyton Jones's avatar
      Shrink a couple of hs-boot files · 226860e7
      Simon Peyton Jones authored
      IfaceType.hs-boot and ToIface.hs-boot were bigger than they
      needed to be, so I'm shrinking them.
      226860e7
    • Simon Peyton Jones's avatar
      Re-engineer Given flatten-skolems · 8dc6d645
      Simon Peyton Jones authored
      The big change here is to fix an outright bug in flattening of Givens,
      albeit one that is very hard to exhibit.  Suppose we have the constraint
          forall a. (a ~ F b) => ..., (forall c. ....(F b)...) ...
      
      Then
       - we'll flatten the (F) b to a fsk, say  (F b ~ fsk1)
       - we'll rewrite the (F b) inside the inner implication to 'fsk1'
       - when we leave the outer constraint we are suppose to unflatten;
         but that fsk1 will still be there
       - if we re-simplify the entire outer implication, we'll re-flatten
         the Given (F b) to, say, (F b ~ fsk2)
      Now we have two fsks standing for the same thing, and that is very
      wrong.
      
      Solution: make fsks behave more like fmvs:
       - A flatten-skolem is now a MetaTyVar, whose MetaInfo is FlatSkolTv
       - We "fill in" that meta-tyvar when leaving the implication
       - The old FlatSkol form of TcTyVarDetails is gone completely
       - We track the flatten-skolems for the current implication in
         a new field of InertSet, inert_fsks.
      
      See Note [The flattening story] in TcFlatten.
      
      In doing this I found various other things to fix:
      
      * I removed the zonkSimples from TcFlatten.unflattenWanteds; it wasn't
        needed.   But I added one in TcSimplify.floatEqualities, which does
        the zonk precisely when it is needed.
      
      * Trac #13674 showed up a case where we had
           - an insoluble Given,   e.g.  a ~ [a]
           - the same insoluble Wanted   a ~ [a]
        We don't use the Given to rewwrite the Wanted (obviously), but
        we therefore ended up reporting
            Can't deduce (a ~ [a]) from (a ~ [a])
        which is silly.
      
        Conclusion: when reporting errors, make the occurs check "win"
        See Note [Occurs check wins] in TcErrors
      8dc6d645
    • Simon Peyton Jones's avatar
      Make isInsolubleOccursCheck more aggressive · c2eea089
      Simon Peyton Jones authored
      Consider
        type family F a :: * -> *
      
      Then (a ~ F Int a) is an insoluble occurs check, and can be reported
      as such.  Previous to this patch, TcType.isInsolubleOccursCheck was
      treating any type-family application (including an over-saturated one)
      as unconditionally not-insoluble.
      
      This really only affects error messages, and then only slightly. I
      tripped over this when investigating  Trac #13674.
      c2eea089
    • Simon Peyton Jones's avatar
      A bit more tc-tracing · 17055da1
      Simon Peyton Jones authored
      17055da1
  9. 25 May, 2017 3 commits
    • Sergei Trofimovich's avatar
      rules: add per-library EXTRA_HC_OPTS · f011f587
      Sergei Trofimovich authored
      Sometimes it's handy to change a compiler flag
      for a library in stage{0,1,2}.
      
      Usage example:
      
          libraries/binary_EXTRA_HC_OPTS += -O1
          libraries/containers_EXTRA_HC_OPTS += -O1
          libraries/bytestring_EXTRA_HC_OPTS += -O1
      
      Here override default -O2 defined in .cabal files
      for these libraries to speed build up.
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      f011f587
    • Simon Peyton Jones's avatar
      Pattern synonyms and higher rank types · c9977385
      Simon Peyton Jones authored
      This patch fixes two separate bugs which contributed to making
      Trac #13752 go wrong
      
      1.  We need to use tcSubType, not tcUnify,
          in tcCheckPatSynDecl.tc_arg.
      
          Reason: Note [Pattern synonyms and higher rank types]
      
      2.  TcUnify.tc_sub_type had a special case designed to improve error
          messages; see Note [Don't skolemise unnecessarily].  But the
          special case was too liberal, and ended up using unification
          (which led to rejecting the program) when it should instead taken
          the normal path (which accepts the program).
      
          I fixed this by making the test more conservative.
      c9977385
    • Simon Peyton Jones's avatar
      Comments only · 10131947
      Simon Peyton Jones authored
      10131947
  10. 23 May, 2017 6 commits
    • Gabor Greif's avatar
      Typos in comments and manual [ci skip] · 0b4b4a34
      Gabor Greif authored
      0b4b4a34
    • Ben Gamari's avatar
    • Ben Gamari's avatar
      base: Fix a few TODOs in Typeable.Internal · 6166b59f
      Ben Gamari authored
      Test Plan: Validate
      
      Reviewers: austin, hvr, dfeuer
      
      Reviewed By: dfeuer
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13746
      
      Differential Revision: https://phabricator.haskell.org/D3605
      6166b59f
    • Sergei Trofimovich's avatar
      ghc.mk: rename installed ghc-stage1 on non-windows · 10760105
      Sergei Trofimovich authored
      When user installs _native_ build ghc executable is renamed
      from '$(libexec)/bin/ghc-stage<N>' to '$(libexec)/bin/ghc'.
      But not on windows!
      
      In case of _cross-compiler_ rename should happen only
      for '$(libexec)/bin/ghc-stage<N>' runnable on non-windows
      platform.
      
      Before the change '$(libexec)/bin/ghc-stage<N>' rename happened
      for any compiler not targeting windows.
      
      After the patch rename also happens for '$(libexec)/bin/ghc-stage1'
      cross-compiler built for linux targeting windows (Stage1Only=YES case).
      
      Or on a concrete example:
      
         # host is x86_64-pc-linux-gnu
         $ ./configure --target=i686-w64-mingw32
         $ make install Stage1Only=YES
      
      Before the change the layout was:
         - '$(libexec)/bin/ghc-stage1' was installed
         - bin/ghc contained 'exec $(libexec)/bin/ghc' # missing file!
      After the change:
         - '$(libexec)/bin/ghc' was installed
         - bin/ghc contained 'exec $(libexec)/bin/ghc' # present file
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      10760105
    • Sergei Trofimovich's avatar
      mk/config.mk.in: lower -O2 optimization down to -O1 on UNREG · 432a1f18
      Sergei Trofimovich authored
      It's not a new behaviour. First it was introduced by
      2d5372cf
      ("lower -O2 optimization down to -O1 on UNREG") to fix build
      failure on unregisterised powerpc64.
      
      This time I've noticed build failures on unregisterised ia64.
      
      The change was accidentally reverted by commit
      14d0f7f1
      ("Build system: Add stage specific SRC_HC_(WARNING_)OPTS)
      
      The revert happened due to the following code rearrangement:
      
          ifeq "$(GhcUnregisterised)" "YES"
          GhcStage1HcOpts=
          GhcStage2HcOpts=
          GhcStage3HcOpts=
          endif
      
          GhcUnregisterised=@Unregisterised@
      
      As a result 'ifeq' part has no effect.
      
      The change moves 'ifeq' down to the very end of file
      and adds a note it depends on the 'GhcUnregisterised' variable.
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      432a1f18
    • Sergei Trofimovich's avatar
      aclocal.m4: allow override of dllwrap and windres when cross-compiling · 1fd06de4
      Sergei Trofimovich authored
      Commit 66108864 reverted ability
      to override 'dllwrap' and 'windres' paths when cross-compiling.
      
      After this change (and a few libraries/Win32 patches) I was able
      to build cross-compiler to windows:
      
          $ ./configure --target=i686-w64-mingw32 \
              DllWrap=i686-w64-mingw32-dllwrap \
              Windres=i686-w64-mingw32-windres
      
      Later both 'dllwrap' and 'windres' should be derived from --target=
      as we do now for 'CC', 'AR', 'NM' and others.
      Signed-off-by: default avatarSergei Trofimovich <slyfox@gentoo.org>
      1fd06de4
  11. 22 May, 2017 4 commits
    • niteria's avatar
      Extend ModuleSet with useful functions · 033f897a
      niteria authored
      033f897a
    • niteria's avatar
      Testcase for type family consistency checks · 2bc3a057
      niteria authored
      Based on my quick search, we don't have a test
      that verifies that we check the type family instances of
      currently compiled module against direct or indirect
      dependencies.
      
      This adds two tests: for a direct dependency and
      for an indirect dependency.
      
      I also added a comment to make it clear what the 'Over'
      test tests.
      
      Other than completeness, it makes sense to have these
      tests because if you look at
      Note [The type family instance consistency story] in FamInsts
      these cases are checked through different mechanisms.
      
      Test Plan: new tests
      
      Reviewers: simonmar, rwbarton, simonpj, austin, bgamari
      
      Reviewed By: simonpj, bgamari
      
      Subscribers: thomie
      
      GHC Trac Issues: #13719
      
      Differential Revision: https://phabricator.haskell.org/D3602
      2bc3a057
    • niteria's avatar
      Testcase for #13719 · 17fef390
      niteria authored
      I expect to improve this, a testcase will ensure
      it doesn't regress.
      
      Test Plan: ./validate
      
      Reviewers: simonmar, austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13719
      
      Differential Revision: https://phabricator.haskell.org/D3600
      17fef390
    • Rufflewind's avatar
      Add "header" to GHC_COLORS · 139ef04b
      Rufflewind authored
      Add "header" to GHC_COLORS and allow colors to be inherited from the
      surroundings.
      
      Test Plan: validate
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13718
      
      Differential Revision: https://phabricator.haskell.org/D3599
      139ef04b