ghc.git
2 years agoStgLint: Show type of out-of-scope binders
Ben Gamari [Tue, 29 Aug 2017 18:38:24 +0000 (14:38 -0400)] 
StgLint: Show type of out-of-scope binders

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3887

2 years agonativeGen: Don't index into linked lists
Ben Gamari [Tue, 29 Aug 2017 18:51:52 +0000 (14:51 -0400)] 
nativeGen: Don't index into linked lists

There were a couple places where we indexed into linked lists of
register names.  Replace these with arrays.

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3893

2 years agoPackageDb: Explicitly unlock package database before closing
Ben Gamari [Tue, 29 Aug 2017 18:45:28 +0000 (14:45 -0400)] 
PackageDb: Explicitly unlock package database before closing

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #13945

Differential Revision: https://phabricator.haskell.org/D3874

2 years agobase: Add support for file unlocking
Ben Gamari [Tue, 29 Aug 2017 18:45:08 +0000 (14:45 -0400)] 
base: Add support for file unlocking

Reviewers: austin, hvr

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3875

2 years agoghc-pkg: Try opening lockfiles in read-write mode first
Ben Gamari [Tue, 29 Aug 2017 18:26:55 +0000 (14:26 -0400)] 
ghc-pkg: Try opening lockfiles in read-write mode first

As pointed out in #13945, some filesystems only allow allow exclusive
locks if the fd being locked was opened for write access. This causes
ghc-pkg to fail as it first attempts to open and exclusively lock its
lockfile in read-only mode to accomodate package databases for which we
lack write permissions (e.g.  global package databases).

Instead, we now try read-write mode first, falling back to read-only
mode if this fails.

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #13945

Differential Revision: https://phabricator.haskell.org/D3897

2 years agoAdd gen-dll as replacement for dll-split
Tamar Christina [Tue, 29 Aug 2017 22:09:09 +0000 (23:09 +0100)] 
Add gen-dll as replacement for dll-split

Summary:
This tool can be used to generate dll's for any list of object files
given to it. It will then repartition them automatically to fit within
a dll and generates as many dll's as needed to do this. Cyclic dependencies
between these generated dlls are handle automatically so there is no need
to tell it how to partition.

It is also a lot more general than `dll-split` as it is able to split any
package not just `libGHC`. It also uses a trick using GNU style import libraries
to hide the splitting from the rest of the pipeline. Which means come linking time
you don't need to know which dll contains what symbol or how many split dlls were
created.

The import libraries are by default created with libtool. However since libtool is BFD
based it is very slow. So if present and detected by configure the `genlib` tool
from the msys2 project is used. This makes a difference of about ~45 minutes when compiling.

To install `genlib` run `pacman -Sy mingw-w64-$(uname -m)-tools-git`.

More detailed explaination of the process can be found here
https://ghc.haskell.org/trac/ghc/wiki/WindowsDynamicLinking

Test Plan: ./validate

Reviewers: austin, hvr, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: snowleopard, rwbarton, thomie, erikd, #ghc_windows_task_force

GHC Trac Issues: #5987

Differential Revision: https://phabricator.haskell.org/D3883

2 years agoFix decomposition error on Windows
Tamar Christina [Tue, 29 Aug 2017 21:59:38 +0000 (22:59 +0100)] 
Fix decomposition error on Windows

Summary:
Fix the path decomposition error that occurs when the Symlink resolver
fails. `Win32.try` throws an exception, so catch it and assume the path
isn't a symlink to use the old behavior.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14159

Differential Revision: https://phabricator.haskell.org/D3891

2 years agoRefactor type family instance abstract syntax declarations
Ryan Scott [Tue, 29 Aug 2017 16:38:54 +0000 (12:38 -0400)] 
Refactor type family instance abstract syntax declarations

This implements @simonpj's suggested refactoring of the abstract syntax
for type/data family instances (from
https://ghc.haskell.org/trac/ghc/ticket/14131#comment:9). This combines
the previously separate `TyFamEqn` and `DataFamInstDecl` types into a
single `FamEqn` datatype. This also factors the `HsImplicitBndrs` out of
`HsTyPats` in favor of putting them just outside of `FamEqn` (as opposed
to before, where all of the implicit binders were embedded inside of
`TyFamEqn`/`DataFamInstDecl`). Finally, along the way I noticed that
`dfid_fvs` and `tfid_fvs` were completely unused, so I removed them.

Aside from some changes in parser test output, there is no change in
behavior.

Requires a Haddock submodule commit from my fork (at
https://github.com/RyanGlScott/haddock/commit/815d2deb9c0222c916becccf84
64b740c26255fd)

Test Plan: ./validate

Reviewers: simonpj, austin, goldfire, bgamari, alanz

Reviewed By: bgamari

Subscribers: mpickering, goldfire, rwbarton, thomie, simonpj

GHC Trac Issues: #14131

Differential Revision: https://phabricator.haskell.org/D3881

2 years agoRemove dll-split.
Tamar Christina [Mon, 28 Aug 2017 16:29:48 +0000 (12:29 -0400)] 
Remove dll-split.

This patch removes dll-split from the code base, the reason is dll-split
no longer makes any sense. It was designed to split a dll in two, but we
now already have many more symbols than would fit inside two dlls. So we
need a third one. This means there's no point in having to maintain this
list as it'll never work anyway and the solution isn't scalable.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie, #ghc_windows_task_force

GHC Trac Issues: #5987

Differential Revision: https://phabricator.haskell.org/D3882

2 years agodesugar: Ensure that a module's dep_orphs doesn't contain itself
Ben Gamari [Sat, 26 Aug 2017 20:17:18 +0000 (16:17 -0400)] 
desugar: Ensure that a module's dep_orphs doesn't contain itself

Consider that we have two modules, A and B, both with hs-boot files,

  * A.hs contains a SOURCE import of B
  * B.hs-boot contains a SOURCE import of A
  * A.hs-boot declares an orphan instance
  * A.hs defines the orphan instance

In this case, B's dep_orphs will contain A due to its SOURCE import of
A.  Consequently, A will contain itself in its imp_orphs due to its
import of B.  This fact would end up being recorded in A's interface
file. This would then break the invariant asserted by calculateAvails
that a module does not itself in its dep_orphs. This was the cause
of #14128.

The solution is to remove self-references from imp_orphs when
constructing dep_orphs; we already did a similar thing for dep_mods. I
believe we should do the same for dep_finsts, although I'm treating this
as a separate bug.

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3892

2 years agotestsuite: Add test for #14128
Ben Gamari [Sat, 26 Aug 2017 20:16:47 +0000 (16:16 -0400)] 
testsuite: Add test for #14128

Reviewers: austin, goldfire

Subscribers: rwbarton, thomie

GHC Trac Issues: #14128

Differential Revision: https://phabricator.haskell.org/D3890

2 years agoAdd HasDebugStack for typeKind
Simon Peyton Jones [Mon, 28 Aug 2017 16:35:33 +0000 (17:35 +0100)] 
Add HasDebugStack for typeKind

typeKind can fail, and it's called all over the place, so
it's helpful to know where

2 years agoSmall refactor of getRuntimeRep
Simon Peyton Jones [Mon, 28 Aug 2017 16:33:59 +0000 (17:33 +0100)] 
Small refactor of getRuntimeRep

Instead of using a string argument, use HasDebugCallStack.
(Oddly, some functions were using both!)

Plus, use getRuntimeRep rather than getRuntimeRep_maybe when
if the caller panics on Nothing. Less code, and a better debug
stack.

2 years agoImprove kind-application-error message
Simon Peyton Jones [Mon, 28 Aug 2017 16:23:35 +0000 (17:23 +0100)] 
Improve kind-application-error message

2 years agoUse a well-kinded substitution to instantiate
Simon Peyton Jones [Mon, 28 Aug 2017 16:21:14 +0000 (17:21 +0100)] 
Use a well-kinded substitution to instantiate

In tcDataConPat we were creating an ill-kinded substitution
-- or at least one that is well kinded only after you have solved
other equalities.  THat led to a crash, because the instantiated
data con type was ill-kinded.

This patch guarantees that the instantiating substitution is
well-kinded.

Fixed Trac #14154

2 years agoSmall refactoring of meta-tyvar cloning
Simon Peyton Jones [Mon, 28 Aug 2017 16:18:26 +0000 (17:18 +0100)] 
Small refactoring of meta-tyvar cloning

No change in behaviour.

2 years agoRefactor bindHsQTyVars and friends
Simon Peyton Jones [Mon, 28 Aug 2017 13:20:02 +0000 (14:20 +0100)] 
Refactor bindHsQTyVars and friends

This work was triggered by Trac #13738, which revealed to me that
the code RnTypes.bindHsQTyVars and bindLHsTyVarBndrs was a huge
tangled mess -- and outright wrong on occasion as the ticket showed.

The big problem was that bindLHsTyVarBndrs (which is invoked at every
HsForAll, including nested higher rank ones) was attempting to bind
implicit kind variables, which it has absolutely no busineess doing.
Imlicit kind quantification is done at the outside only, in fact
precisely where we have HsImplicitBndrs or LHsQTyVars (which also
has implicit binders).

Achieving this move was surprisingly hard, because more and more
barnacles had accreted aroud the original mistake.  It's much
much better now.

Summary of changes.  Almost all the action is in RnTypes.

* Implicit kind variables are bound only by
  - By bindHsQTyVars, which deals with LHsQTyVars
  - By rnImplicitBndrs, which deals with HsImplicitBndrs

* bindLHsTyVarBndrs, and bindLHsTyVarBndr are radically simplified.
  They simply does far less, and have lots their forest of
  incomprehensible accumulating parameters.  (To be fair, some of
  the code in bindLHsTyVarBndrs just moved to bindHsQTyVars, but
  in much more perspicuous form.)

* The code that checks if a variable appears in both a kind and
  a type (triggering RnTypes.mixedVarsErr) was bizarre.  E.g.
  we had this in RnTypes.extract_hs_tv_bndrs
       ; check_for_mixed_vars bndr_kvs acc_tvs
       ; check_for_mixed_vars bndr_kvs body_tvs
       ; check_for_mixed_vars body_tvs acc_kvs
       ; check_for_mixed_vars body_kvs acc_tvs
       ; check_for_mixed_vars locals body_kvs
  I cleaned all this up; now we check for mixed use at binding
  sites only.

* Checks for "Variable used as a kind before being bound", like
     data T (a :: k) k = rhs
  now just show up straightforwardly as "k is not in scope".
  See Note [Kind variable ordering]

* There are some knock-on simplifications in RnSource.

2 years agoAdd TcRnMonad.unlessXOptM
Simon Peyton Jones [Mon, 28 Aug 2017 12:37:56 +0000 (13:37 +0100)] 
Add TcRnMonad.unlessXOptM

This usefully joins whenXOptM; there are probably lots of places
we should use it!

This patch does not use new new function at all; but it's preparing
for an upcoming patch when I do use it.

2 years agoA bit more -ddump-tc tracing
Simon Peyton Jones [Mon, 28 Aug 2017 12:37:30 +0000 (13:37 +0100)] 
A bit more -ddump-tc tracing

2 years agoBetter debug-printing for Outputable TyConBinder
Simon Peyton Jones [Mon, 28 Aug 2017 12:27:14 +0000 (13:27 +0100)] 
Better debug-printing for Outputable TyConBinder

Anon and Required were printed the same :-(.  This is only for
debug printing, so I switched to a slightly more verbose and
explicit format

2 years agoComments only
Simon Peyton Jones [Mon, 28 Aug 2017 12:26:07 +0000 (13:26 +0100)] 
Comments only

Better comment on con_qvars in ConDecl

2 years agoMake parsed AST dump output lazily
David Feuer [Tue, 29 Aug 2017 03:28:08 +0000 (23:28 -0400)] 
Make parsed AST dump output lazily

Previously, `showAstData` produced a `String`. That `String` would
then be converted to a `Doc` using `text` to implement
`-ddump-parsed-ast`. But rendering `text` calculates the length
of the `String` before doing anything else. Since the AST can be
very large, this was bad: the whole dump string (potentially hundreds
of millions of `Char`s) was accumulated in memory.

Now, `showAstData` produces a `Doc` directly, which seems to work
a lot better. As an extra bonus, the code is simpler and cleaner.
The formatting has changed a bit, as the previous ad hoc approach
didn't really match the pretty printer too well. If someone cares
enough to request adjustments, we can surely make them.

Reviewers: austin, bgamari, mpickering, alanz

Reviewed By: bgamari

Subscribers: mpickering, rwbarton, thomie

GHC Trac Issues: #14161

Differential Revision: https://phabricator.haskell.org/D3894

2 years agoActually bump T12150
David Feuer [Mon, 28 Aug 2017 19:33:53 +0000 (15:33 -0400)] 
Actually bump T12150

2 years agoAdjust test suite stats
David Feuer [Mon, 28 Aug 2017 18:35:19 +0000 (14:35 -0400)] 
Adjust test suite stats

T1969 and T12150 were failing (stat too high)

2 years agoFix two typos in the ImpredicativeTypes user guide
Benjamin Hodgson [Fri, 25 Aug 2017 15:22:09 +0000 (16:22 +0100)] 
Fix two typos in the ImpredicativeTypes user guide

2 years agoRip out mkUserGuidePart
Ben Gamari [Thu, 24 Aug 2017 16:49:06 +0000 (12:49 -0400)] 
Rip out mkUserGuidePart

Reviewers: austin, hvr

Subscribers: rwbarton, thomie, erikd

Differential Revision: https://phabricator.haskell.org/D3886

2 years agorts: Fix ASSERTs with space before opening paren
Ben Gamari [Thu, 24 Aug 2017 16:48:54 +0000 (12:48 -0400)] 
rts: Fix ASSERTs with space before opening paren

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3885

2 years agorts: Fix references to Note [BFD import library]
Ben Gamari [Thu, 24 Aug 2017 16:48:31 +0000 (12:48 -0400)] 
rts: Fix references to Note [BFD import library]

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3884

2 years agorts: Fix warnings on aarch64 and clean up style
Ben Gamari [Thu, 24 Aug 2017 16:48:19 +0000 (12:48 -0400)] 
rts: Fix warnings on aarch64 and clean up style

Reviewers: austin, erikd, simonmar

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3877

2 years agoAdd strict variant of iterate
Ben Gamari [Thu, 24 Aug 2017 15:47:40 +0000 (11:47 -0400)] 
Add strict variant of iterate

Summary: This closes the nearly-eight-year-old #3474.

Test Plan: Validate

Reviewers: RyanGlScott, austin, hvr

Subscribers: rwbarton, thomie

GHC Trac Issues: #3474

Differential Revision: https://phabricator.haskell.org/D3870

2 years agoComments, plus adjust debug print of TcTyThing(ATyVar)
Simon Peyton Jones [Wed, 2 Aug 2017 14:52:49 +0000 (15:52 +0100)] 
Comments, plus adjust debug print of TcTyThing(ATyVar)

2 years agoDon't do the RhsCtxt thing for join points
Simon Peyton Jones [Fri, 25 Aug 2017 11:52:14 +0000 (12:52 +0100)] 
Don't do the RhsCtxt thing for join points

This minor change fixes Trac #14137.

It is described in Note [Join point RHSs] in OccurAnal

2 years agoRefactor the Mighty Simplifier
Simon Peyton Jones [Fri, 25 Aug 2017 08:22:03 +0000 (09:22 +0100)] 
Refactor the Mighty Simplifier

Triggered by #12150, and the knock-on effects of join points, I did a
major refactoring of the Simplifier.  This is a big patch that change
a lot of Simplify.hs: I did a lot of other re-organisation.

The main event
~~~~~~~~~~~~~~
Since the dawn of time we have had
  simplExpr :: SimplEnv -> InExpr -> SimplCont
            -> SimplM (SimplEnv, OutExpr)

What's that SimplEnv in the result?  When simplifying an expression the
simplifier add floated let-bindings to the SimplEnv, extending the
in-scope set appropriately, and hence needs to resturn the SimplEnv at
the end.  The mode, flags, substitution in the returned SimplEnv were
all irrelevant: it was just the floating bindings.

It's strange to accumulate part of the /result/ in the /environment/
argument!  And indeed its leads to all manner of mysterious calls to
zapFloats and transferring of floats from one SimplEnv to another.
It got worse with join points, so I finally bit the bullet and refactored.
Now we have
  simplExpr :: SimplEnv -> InExpr -> SimplCont
            -> SimplM (SimplFloats, OutExpr)
  -- See Note [The big picture]
and the SimplEnv no longer has floats in it.  The code is no shorter,
but it /is/ easier to understand.

Main changes

* Remove seLetFloats field from SimplEnv

* Define new data type SimplFloats, and functions over it

* Change the types of simplExpr, simplBind, and their many variants,
  to follow the above plan

Bottoming bindings
~~~~~~~~~~~~~~~~~~
I made one other significant change in SimplUtils (not just refactoring),
related to Trac #12150 comment:16.  Given
  x = <rhs>
where <rhs> turns out to be a bottoming expression, propagate that
information to x's IdInfo immediately.  That's always good, because
it makes x be inlined less (we don't inline bottoming things), and
it allows (case x of ...) to drop the dead alterantives immediately.
Moreover, we are doing the analysis anyway, in tryEtaExpandRhs, which
calls CoreArity.findRhsArity, which already does simple bottom analysis.
So we are generating the information; all we need do is to atach the
bottoming info to the IdInfo.

See Note [Bottoming bindings]

Smaller refactoring
~~~~~~~~~~~~~~~~~~~
* Rename SimplifierMode to SimplMode
* Put DynFlags as a new field in SimplMode, to make fewer
  monadic calls to getDynFlags.
* Move the code in addPolyBind into abstractFloats
* Move the "don't eta-expand join points" into tryEtaExpandRhs

2 years agoBottoming expressions should not be expandable
Simon Peyton Jones [Fri, 25 Aug 2017 08:00:31 +0000 (09:00 +0100)] 
Bottoming expressions should not be expandable

This patch changes isExpandableApp and isWorkFreeApp to respond
False to bottoming applications.  I found that if we had

  x = undefined <dict-expr>

then prepareRhs was ANF'ing it to

  d = <dict-expr>
  x = undefined d

which is stupid (no gain); and worse it made the simplifier iterate
indefinitely.  It showed up when I started marking 'x' as a bottoming
Id more aggresssively than before; but it's been a lurking bug for
ages.

It was convenient to make isWorkFreeApp also return False for
bottoming applications, and I see no reason not to do so.

That leaves isCheapApp.  It currently replies True to bottoming
applications, but I don't see why that's good..  Something to try
later.

2 years agoRestrict exprOkForSpeculation/case to unlifted types
Simon Peyton Jones [Tue, 22 Aug 2017 12:34:31 +0000 (13:34 +0100)] 
Restrict exprOkForSpeculation/case to unlifted types

Consider
  case x of y
    DEFAULT -> let v::Int# = case y of
                               True  -> e1
                               False -> e2
                in ...

Previously this would have been ok-for-speculation because
y is evaluated.  But the binder-swap done
by SetLevels would transform the inner alternative to
     DEFAULT -> let v::Int# = case x of { ... }
                in ...)
which does /not/ satisfy the let/app invariant, because x is
not evaluated.

I don't know why this has never bitten us before, but it began
to bite when I did upcoming refactoring of the Simplifier.

So this patch narrows exprOkForSpeculation to only work for
/unlifted/ cases.

To make this work I had to make exprOkForSpeculation non-polymorphic
in the binder type, which has a little knock-on for is use in
SetLevels.

(It's annoying that we need to handle cases at all, but see
 Note [exprOkForSpeculation: case expressions])

2 years agoCNF: Implement compaction for small pointer arrays
Ben Gamari [Fri, 25 Aug 2017 01:55:27 +0000 (21:55 -0400)] 
CNF: Implement compaction for small pointer arrays

Test Plan: Validate

Reviewers: austin, erikd, simonmar, dfeuer

Reviewed By: dfeuer

Subscribers: rwbarton, andrewthad, thomie, dfeuer

GHC Trac Issues: #13860, #13857

Differential Revision: https://phabricator.haskell.org/D3888

2 years agoRemove typeKind from Type.hs-boot
Simon Peyton Jones [Wed, 23 Aug 2017 12:58:51 +0000 (13:58 +0100)] 
Remove typeKind from Type.hs-boot

Simple refactoring, reducing unncessary module loops

2 years agoFix defer-out-of-scope-variables
Simon Peyton Jones [Wed, 23 Aug 2017 12:55:33 +0000 (13:55 +0100)] 
Fix defer-out-of-scope-variables

In the hacky code in TcUnify.buildImplication we'd failed to account
for -fdefer-out-of-scope-variables.  See the new function
TcUnify.implicationNeeded.

Fixes Trac #14149

2 years agoBetter pretty-printing for CHoleCan
Simon Peyton Jones [Wed, 23 Aug 2017 12:48:07 +0000 (13:48 +0100)] 
Better pretty-printing for CHoleCan

Debug-only; no change in mainstream behaviour

2 years agoTypo fixed
Gabor Greif [Thu, 24 Aug 2017 10:07:36 +0000 (12:07 +0200)] 
Typo fixed

and update to the 'nofib' submodule

2 years agousers-guide: Better error messages on incomplete ghc-flag directives
Ben Gamari [Tue, 22 Aug 2017 15:51:54 +0000 (11:51 -0400)] 
users-guide: Better error messages on incomplete ghc-flag directives

2 years agoAdd support for producing position-independent executables
Ben Gamari [Tue, 22 Aug 2017 15:41:47 +0000 (11:41 -0400)] 
Add support for producing position-independent executables

Previously due to #12759 we disabled PIE support entirely. However, this
breaks the user's ability to produce PIEs. Add an explicit flag, -fPIE,
allowing the user to build PIEs.

Test Plan: Validate

Reviewers: rwbarton, austin, simonmar

Subscribers: trommler, simonmar, trofi, jrtc27, thomie

GHC Trac Issues: #12759, #13702

Differential Revision: https://phabricator.haskell.org/D3589

2 years agoDynFlags: Add inverse of -dno-debug-output
Ben Gamari [Tue, 22 Aug 2017 15:40:51 +0000 (11:40 -0400)] 
DynFlags: Add inverse of -dno-debug-output

Reviewers: austin

Subscribers: rwbarton, thomie

GHC Trac Issues: #14142

Differential Revision: https://phabricator.haskell.org/D3876

2 years agoFixed a typo in template-haskell documentation
Benjamin Hodgson [Tue, 22 Aug 2017 12:11:43 +0000 (13:11 +0100)] 
Fixed a typo in template-haskell documentation

The documentation for `Type`'s `ForallT` constructor had a typo (pun not
intended). `ctxt` is separated from `type` in the surface syntax by a fat
arrow (`=>`), not a thin arrow (`->`).

2 years agofix typo (expreesions -> expressions)
Chris Martin [Sat, 19 Aug 2017 22:33:11 +0000 (18:33 -0400)] 
fix typo (expreesions -> expressions)

2 years agoBump haddock submodule
Ben Gamari [Tue, 22 Aug 2017 12:47:33 +0000 (08:47 -0400)] 
Bump haddock submodule

2 years agoMake law for Foldable.length explicit
Alain O'Dea [Tue, 22 Aug 2017 12:47:07 +0000 (08:47 -0400)] 
Make law for Foldable.length explicit

Test Plan: Documentation only. Not necessary.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3878

2 years agoStgLint: Allow join point bindings of unlifted type
Ben Gamari [Tue, 22 Aug 2017 12:44:47 +0000 (08:44 -0400)] 
StgLint: Allow join point bindings of unlifted type

As described in `Note [CoreSyn let/app invariant]` this is allowed.

Fixes #14117.

Test Plan: Build GHC with BuildFlavour=devel2 with -dstg-lint

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: rwbarton, thomie

GHC Trac Issues: #14117

Differential Revision: https://phabricator.haskell.org/D3857

2 years agoFix incorrect retypecheck loop in -j (#14075)
Edward Z. Yang [Tue, 22 Aug 2017 12:44:25 +0000 (08:44 -0400)] 
Fix incorrect retypecheck loop in -j (#14075)

The parallel codepath was incorrectly retypechecking the
hs-boot ModIface prior to typechecking the hs file,
which was inconsistent with the non-parallel case.  The
non-parallel case gets it right: you don't want to retypecheck
the hs-boot file itself (forwarding its declarations to hs)
because you need it to be consistently knot-tied with itself
when you compare the interfaces.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, simonpj, austin

Reviewed By: bgamari

Subscribers: duog, rwbarton, thomie

GHC Trac Issues: #14075

Differential Revision: https://phabricator.haskell.org/D3815

2 years agoMove validate cleaning from distclean to clean
Douglas Wilson [Tue, 22 Aug 2017 12:44:00 +0000 (08:44 -0400)] 
Move validate cleaning from distclean to clean

This bit me today: I was in validate mode without realising it and "make
clean" didn't help. I don't see a reason for this to be in distclean, as
it isn't generated by ./configure, which is the rule described in
https://ghc.haskell.org/trac/ghc/wiki/Building/Using

Test Plan: Is there a reason for this to be in distclean?

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3814

2 years agoMake the Read instance for Proxy (and friends) ignore precedence
Ryan Scott [Tue, 22 Aug 2017 13:29:07 +0000 (09:29 -0400)] 
Make the Read instance for Proxy (and friends) ignore precedence

Summary:
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

2 years agoRevise function arity mismatch errors involving TypeApplications
Ryan Scott [Tue, 22 Aug 2017 13:29:01 +0000 (09:29 -0400)] 
Revise function arity mismatch errors involving TypeApplications

Summary:
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

2 years agoFix #13885 by freshening reified GADT constructors' universal tyvars
Ryan Scott [Tue, 22 Aug 2017 13:28:56 +0000 (09:28 -0400)] 
Fix #13885 by freshening reified GADT constructors' universal tyvars

Summary:
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

2 years agoFix #14114 by checking for duplicate vars on pattern synonym RHSes
Ryan Scott [Tue, 22 Aug 2017 13:28:49 +0000 (09:28 -0400)] 
Fix #14114 by checking for duplicate vars on pattern synonym RHSes

Summary:
Because we weren't checking for duplicate variables on the right-hand
sides of pattern synonyms, bogus definitions like this one passed the renamer:

```lang=haskell
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

2 years agoFix #14125 by normalizing data family instances more aggressively
Ryan Scott [Tue, 22 Aug 2017 13:28:43 +0000 (09:28 -0400)] 
Fix #14125 by normalizing data family instances more aggressively

Summary:
Commit 3540d1e1a23926ce0a8a6ae83a36f5f6b2497ccf 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 years agoFix loading of dlls on 32bit windows
Sergey Vinokurov [Sun, 20 Aug 2017 21:40:08 +0000 (00:40 +0300)] 
Fix loading of dlls on 32bit windows

The point of fix is to handle case when loaded dll loads no
other dlls, i.e. it's import table is empty.

GHC Trac Issues: #14081

2 years agoRevert "Add strict variant of iterate"
Ben Gamari [Sat, 19 Aug 2017 11:44:13 +0000 (07:44 -0400)] 
Revert "Add strict variant of iterate"

This was not ready to commit.
This reverts commit 8e5b6ec6566da57d15b0810a07902d9eac85cb79.

2 years agoCorrect incorrect free in PE linker
Tamar Christina [Sat, 19 Aug 2017 07:31:34 +0000 (08:31 +0100)] 
Correct incorrect free in PE linker

Summary:
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

2 years agoAdd strict variant of iterate
Ben Gamari [Fri, 18 Aug 2017 14:24:58 +0000 (10:24 -0400)] 
Add strict variant of iterate

This closes the nearly-eight-year-old #3474.

2 years agousers_guide: Convert mkUserGuidePart generation to a Sphinx extension
Patrick Dougherty [Fri, 18 Aug 2017 13:20:07 +0000 (09:20 -0400)] 
users_guide: Convert mkUserGuidePart generation to a Sphinx extension

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
https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/ghc.html

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

2 years agoEnable -Wcpp-undef for GHC and runtime system
Ben Gamari [Fri, 18 Aug 2017 12:37:14 +0000 (08:37 -0400)] 
Enable -Wcpp-undef for GHC and runtime system

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

2 years agoDoctests for Data.Tuple
David Luposchainsky [Fri, 11 Aug 2017 08:37:55 +0000 (10:37 +0200)] 
Doctests for Data.Tuple

2 years agoTest Trac #14110
Simon Peyton Jones [Fri, 18 Aug 2017 13:50:57 +0000 (14:50 +0100)] 
Test Trac #14110

2 years agoComments only
Simon Peyton Jones [Fri, 18 Aug 2017 08:02:13 +0000 (09:02 +0100)] 
Comments only

2 years agoTracing in OccAnal (commented out)
Simon Peyton Jones [Wed, 2 Aug 2017 14:56:32 +0000 (15:56 +0100)] 
Tracing in OccAnal (commented out)

2 years agoRestrict Lint's complaints about recursive INLINEs somewhat
Simon Peyton Jones [Wed, 2 Aug 2017 08:48:58 +0000 (09:48 +0100)] 
Restrict Lint's complaints about recursive INLINEs somewhat

This patch makes the Lint warning about recursive functions with an
INLINE only apply if there is a stable unfolding.  If not (e.g. some
other pass took it out) we don't need to worry.  Not a big deal.

2 years agoComments about GlobalRdrEnv shadowing
Simon Peyton Jones [Tue, 1 Aug 2017 11:07:34 +0000 (12:07 +0100)] 
Comments about GlobalRdrEnv shadowing

Provoked by Trac #14052

2 years agoCSE.cseOneExpr: Set InScopeSet correctly
Joachim Breitner [Fri, 18 Aug 2017 12:14:19 +0000 (14:14 +0200)] 
CSE.cseOneExpr: Set InScopeSet correctly

because this is a convenience function for API users, calculate the
in-scope set from `exprFreeVars`.

2 years agotestsuite: Add test for #13916
Ben Gamari [Thu, 17 Aug 2017 14:32:58 +0000 (10:32 -0400)] 
testsuite: Add test for #13916

Reviewers: austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3764

2 years agoMake function intToSBigNat# preserve sign (fixes #14085)
Olivier Chéron [Thu, 17 Aug 2017 14:32:28 +0000 (10:32 -0400)] 
Make function intToSBigNat# preserve sign (fixes #14085)

Impacts only functions gcdExtInteger, powModInteger and
recipModInteger which gave invalid results on negative S# inputs.

Also fixes gcdExtInteger assertion when first argument is negative.

Test Plan: Updated test case integerGmpInternals

Reviewers: austin, hvr, goldfire, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14085

Differential Revision: https://phabricator.haskell.org/D3826

2 years agoRemove unneeded reqlibs for mtl and parsec in the GHC testsuite
Ryan Scott [Thu, 17 Aug 2017 14:31:26 +0000 (10:31 -0400)] 
Remove unneeded reqlibs for mtl and parsec in the GHC testsuite

Now that `mtl` and `parsec` are boot libraries, there's no need to
qualify various tests in the testsuite with `reqlib('mtl')` or
`reqlib('parsec')`.

Test Plan: make test TEST="T4809 tcfail126 T4355 tc232 tc223 tc220
tc217 tc183 T5303 DoParamM qq005 qq006 galois_raytrace T1074 mod133
T3787 T4316 prog011 drvfail006 drvfail008"

Reviewers: bgamari, austin

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3855

2 years agoFix #13399 by documenting higher-rank kinds.
Richard Eisenberg [Thu, 17 Aug 2017 14:29:57 +0000 (10:29 -0400)] 
Fix #13399 by documenting higher-rank kinds.

Test Plan: Read it.

Reviewers: simonpj, RyanGlScott, austin, bgamari

Reviewed By: RyanGlScott

Subscribers: rwbarton, thomie

GHC Trac Issues: #13399

Differential Revision: https://phabricator.haskell.org/D3860

2 years agouser-guide: add `:type +d` and `:type +v` in release highlight
Takenobu Tani [Thu, 17 Aug 2017 14:29:43 +0000 (10:29 -0400)] 
user-guide: add `:type +d` and `:type +v` in release highlight

Add new ghci command to release highlight and fix link anchor.

This commit is for ghc-8.2 branch.

Test Plan: build

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #11975

Differential Revision: https://phabricator.haskell.org/D3850

2 years agorts: Enable USDT probes object on Linux
Ben Gamari [Thu, 17 Aug 2017 14:28:39 +0000 (10:28 -0400)] 
rts: Enable USDT probes object on Linux

Summary: The dtrace utility shipped with Debian expects this.

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3829

2 years agouser-guide: fix examples of ghci commands
Takenobu Tani [Thu, 17 Aug 2017 14:28:01 +0000 (10:28 -0400)] 
user-guide: fix examples of ghci commands

Fix examples of ghci commands:
  * correct typos
  * add top-level binding without let statement
  * modify Time.getClockTime to Data.Time.getZonedTime
  * modify Directory.setCurrentDirectory
  * modify ghc version number

Test Plan: build

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3852

2 years agoFix index entries in "separate compilation" section
Chris Martin [Tue, 15 Aug 2017 01:15:22 +0000 (21:15 -0400)] 
Fix index entries in "separate compilation" section

This appears to have been a mistake from the translation of the manual into RST
format by 4fd6207ec6.

2 years agoAdd missing initial version for extension doc.
superfunc [Mon, 14 Aug 2017 00:20:47 +0000 (20:20 -0400)] 
Add missing initial version for extension doc.

2 years agoLoads of doc(test)s
David Luposchainsky [Fri, 11 Aug 2017 12:25:57 +0000 (14:25 +0200)] 
Loads of doc(test)s

2 years agoConvert documentation examples to doctests for ReadP module
David Luposchainsky [Fri, 11 Aug 2017 11:46:13 +0000 (13:46 +0200)] 
Convert documentation examples to doctests for ReadP module

2 years agoMention the category laws explicitly
David Luposchainsky [Fri, 11 Aug 2017 10:56:32 +0000 (12:56 +0200)] 
Mention the category laws explicitly

2 years agoAdd some Monoid doctests
David Luposchainsky [Fri, 11 Aug 2017 10:50:13 +0000 (12:50 +0200)] 
Add some Monoid doctests

2 years agoInsert missing blank line to fix Applicative doc
David Luposchainsky [Fri, 11 Aug 2017 10:31:23 +0000 (12:31 +0200)] 
Insert missing blank line to fix Applicative doc

2 years agoSections with undefined operators have non-standard behavior
David Luposchainsky [Fri, 11 Aug 2017 09:26:52 +0000 (11:26 +0200)] 
Sections with undefined operators have non-standard behavior

2 years agoDoctest for Void.absurd
David Luposchainsky [Fri, 11 Aug 2017 08:38:24 +0000 (10:38 +0200)] 
Doctest for Void.absurd

2 years agoHandle ListPat in isStrictPattern
Alexander Biehl [Fri, 11 Aug 2017 06:29:23 +0000 (08:29 +0200)] 
Handle ListPat in isStrictPattern

This fixes #14105.

2 years agoRemove extra ` from "kind-indexed GADTs" doc
Chris Martin [Thu, 10 Aug 2017 23:37:02 +0000 (19:37 -0400)] 
Remove extra ` from "kind-indexed GADTs" doc

2 years agoFix #11785 by making reifyKind = reifyType
Ryan Scott [Thu, 17 Aug 2017 14:07:32 +0000 (10:07 -0400)] 
Fix #11785 by making reifyKind = reifyType

Summary:
This ties up the last loose end in Template Haskell's separate
code paths for types and kinds. By making `reifyKind = reifyType` in
`TcSplice`, types and kinds are now treated on equal terms in TH.

This is itself a small patch, but most of the heavy lifting to make this
possible was done in ad7b945257ea262e3f6f46daa4ff3e451aeeae0b.

Test Plan: ./validate

Reviewers: goldfire, austin, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie

GHC Trac Issues: #11785

Differential Revision: https://phabricator.haskell.org/D3854

2 years agoSuggest how to fix illegally nested foralls in GADT constructor type signatures
Ryan Scott [Thu, 17 Aug 2017 14:07:03 +0000 (10:07 -0400)] 
Suggest how to fix illegally nested foralls in GADT constructor type signatures

Summary:
Although the code from #12087 isn't accepted by GHC, we can at least
do a better job of letting users know what the problem is, and how to fix it.

Test Plan: make test TEST=T12087

Reviewers: goldfire, austin, bgamari

Reviewed By: goldfire

Subscribers: rwbarton, thomie

GHC Trac Issues: #12087

Differential Revision: https://phabricator.haskell.org/D3851

2 years agoFix #13972 by producing tidier errors
Ryan Scott [Thu, 17 Aug 2017 14:06:32 +0000 (10:06 -0400)] 
Fix #13972 by producing tidier errors

Summary:
Previously, one could experience an error message like this:

```
Expected: T (a -> Either a b)
  Actual: T (a -> Either a b)
```

This makes the error message an iota clearer by tidying it first, which will
instead produce:

```
Expected: T (a1 -> Either a1 b1)
  Actual: T (a -> Either a b)
```

Which steers users towards the understanding that the two sets of tyvars are
actually different.

Test Plan: make test TEST=T13972

Reviewers: simonpj, austin, bgamari, goldfire

Reviewed By: goldfire

Subscribers: goldfire, rwbarton, thomie

GHC Trac Issues: #13972

Differential Revision: https://phabricator.haskell.org/D3820

2 years agoAllow TcDerivInfer to compile with GHC 8.0.1
Ben Gamari [Wed, 16 Aug 2017 23:01:59 +0000 (19:01 -0400)] 
Allow TcDerivInfer to compile with GHC 8.0.1

As of ed7a830de6a2ea74dd6bb81f8ec55b9fe0b52f28 this module uses
MultiWayIf, the parsing behavior of which changed in 8.0.2 due
to #10807. Reformat the code so that it compiles under both 8.0.1 and
8.0.2/8.2.1.

Test Plan: Validate bootstrapping with 8.0.1

Reviewers: austin

Subscribers: rwbarton, thomie, RyanGlScott

GHC Trac Issues: #14130

Differential Revision: https://phabricator.haskell.org/D3863

2 years agoSpeed up compilation of profiling stubs
Ben Gamari [Wed, 16 Aug 2017 23:01:05 +0000 (19:01 -0400)] 
Speed up compilation of profiling stubs

Here we encode the cost centre list as static data. This means that the
initialization stubs are small functions which should be easy for GCC to
compile, even with optimization.

Fixes #7960.

Test Plan: Test profiling

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie

GHC Trac Issues: #7960

Differential Revision: https://phabricator.haskell.org/D3853

2 years agoBump mtl, parsec, text submodules (again)
Ryan Scott [Wed, 16 Aug 2017 15:50:41 +0000 (11:50 -0400)] 
Bump mtl, parsec, text submodules (again)

We failed to add dist-install and dist-boot to .gitignore in the commits
brought in via commit e054c5f06451def4437d9d770ae156f034796c59. This round of
submodule commits should do the trick.

2 years agoBump mtl, parsec, text submodules
Ben Gamari [Tue, 15 Aug 2017 12:28:50 +0000 (08:28 -0400)] 
Bump mtl, parsec, text submodules

a520adcce27908c799b64214618cf9b33572dc37 updated the upstream repository
locations but failed to update the commits themselves.

2 years agoBump nofib submodule
Ben Gamari [Tue, 15 Aug 2017 00:52:57 +0000 (20:52 -0400)] 
Bump nofib submodule

2 years agoAdd Semigroup/Monoid instances to ST monad
Ben Gamari [Tue, 15 Aug 2017 00:58:16 +0000 (20:58 -0400)] 
Add Semigroup/Monoid instances to ST monad

Fixes #14107.

Signed-off-by: Philipp Middendorf <middendorf@plapadoo.de>
Reviewers: austin, hvr, bgamari, RyanGlScott

Reviewed By: bgamari

Subscribers: RyanGlScott, rwbarton, thomie

GHC Trac Issues: #14107

Differential Revision: https://phabricator.haskell.org/D3845

2 years agoBump mtl, parsec, text submodules
Ryan Scott [Tue, 15 Aug 2017 00:57:11 +0000 (20:57 -0400)] 
Bump mtl, parsec, text submodules

These three submodules have commits which add certain files to their
respective .gitignores which GHC's build system produces. Also update
the packages file accordingly.

Test Plan: If it builds, ship it

Reviewers: hvr, austin, bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3842

2 years agoRecognize FreeBSD compiler as Clang.
Gleb Popov [Tue, 15 Aug 2017 00:56:44 +0000 (20:56 -0400)] 
Recognize FreeBSD compiler as Clang.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3840

2 years agoUse a ReaderT in TcDeriv to avoid some tedious plumbing
Ryan Scott [Tue, 15 Aug 2017 00:56:04 +0000 (20:56 -0400)] 
Use a ReaderT in TcDeriv to avoid some tedious plumbing

Addresses point (2) of https://phabricator.haskell.org/D3337#107865.

Before, several functions in `TcDeriv` and `TcDerivInfer` which compute
an `EarlyDerivSpec` were manually threading through about 10 different
arguments, which contribute to quite a lot of clutter whenever they need
to be updated. To minimize this plumbing, and to make it clearer which
of these 10 values are being used where, I refactored the code in
`TcDeriv` and `TcDerivInfer` to use a new `DerivM` type:

```lang=haskell
type DerivM = ReaderT DerivEnv TcRn
```

where `DerivEnv` contains the 10 aforementioned values. In addition to
cleaning up the code, this should make some subsequent changes planned
for later less noisy.

Test Plan: ./validate

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3846

2 years agoDon't drop GHCi-defined functions with -fobject-code enabled
Ryan Scott [Tue, 15 Aug 2017 00:55:39 +0000 (20:55 -0400)] 
Don't drop GHCi-defined functions with -fobject-code enabled

The desugarer was using `targetRetainsAllBindings` as a litmus test for
determining if a function was defined in interactive mode (and thus
should be exported). However, there is a corner case where one can be in
interactive mode and have `targetRetainsAllBindings` return `False`: if
`-fobject-code` is enabled (since the target will no longer be
`HscInteractive`). In such a scenario, we should fall back on a
different test for determining if we are in a GHCi session. I chose to
use `isInteractiveModule`, which appears to do the trick.

Test Plan: make test TEST=T12091

Reviewers: austin, bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #12091

Differential Revision: https://phabricator.haskell.org/D3849

2 years agoProperly handle dlerror() message on FreeBSD when linking linker scripts
Gleb Popov [Tue, 15 Aug 2017 00:54:36 +0000 (20:54 -0400)] 
Properly handle dlerror() message on FreeBSD when linking linker scripts

Test Plan: `GHCi.loadDll "/usr/lib/libc++.so` now works on FreeBSD.

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: simonmar

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3841