ghc.git
2 years agoAdd suggestion for PatternSynonyms parse error (fixes #12429)
Rupert Horlick [Thu, 2 Mar 2017 21:35:31 +0000 (16:35 -0500)] 
Add suggestion for PatternSynonyms parse error (fixes #12429)

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoDon't float out expressions that are okay for speculation
Reid Barton [Thu, 2 Mar 2017 21:30:52 +0000 (16:30 -0500)] 
Don't float out expressions that are okay for speculation

It turned out not to be worth the overhead according to nofib
(+11.62% on fannkuch-redux, +4.3% on k-nucleotide, and some other
smaller losses, with no significant gains).

Test Plan: validate

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: thomie

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

2 years agoFix up test results.
David Feuer [Thu, 2 Mar 2017 21:30:33 +0000 (16:30 -0500)] 
Fix up test results.

Set up test results and Makefile as SPJ intended (I believe).
Previous changes accidentally did something a bit different.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoDon't allow orphan COMPLETE pragmas (#13349)
Reid Barton [Thu, 2 Mar 2017 21:29:55 +0000 (16:29 -0500)] 
Don't allow orphan COMPLETE pragmas (#13349)

We might support them properly in the future, but for now it's simpler
to disallow them.

Test Plan: validate

Reviewers: mpickering, austin, bgamari, simonpj

Reviewed By: mpickering, simonpj

Subscribers: simonpj, thomie

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

2 years agoPrint out sub-libraries of packages more nicely.
Edward Z. Yang [Thu, 2 Mar 2017 21:27:32 +0000 (16:27 -0500)] 
Print out sub-libraries of packages more nicely.

Previously, we would print out the munged package name
which looked like z-bkpcabal01-z-p-0.1.0.0.  Now
it looks like: bkpcabal01-0.1.0.0:p.

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

Reviewers: simonpj, bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd -fwhole-archive-hs-libs
Simon Marlow [Thu, 2 Mar 2017 21:17:12 +0000 (16:17 -0500)] 
Add -fwhole-archive-hs-libs

We're building a demo to show how to hot-swap Haskell code in a
running process, and unfortunately it wasn't possible to convince GHC
to generate the correct linker command line without this extra knob.

Test Plan:
Tested it on a hot-swapping demo (which is not released yet, but will
be shortly)

Reviewers: niteria, austin, erikd, JonCoens, bgamari

Reviewed By: bgamari

Subscribers: Phyx, rwbarton, thomie

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

2 years agoFix T12234 stat mistakes
David Feuer [Fri, 3 Mar 2017 00:02:02 +0000 (19:02 -0500)] 
Fix T12234 stat mistakes

I goofed up updating the expected and recent historical results
here. They should be right now.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoTypofix.
Edward Z. Yang [Wed, 1 Mar 2017 22:21:48 +0000 (14:21 -0800)] 
Typofix.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoPrevent users from defining instances for abstract classes.
Edward Z. Yang [Wed, 1 Mar 2017 08:11:43 +0000 (00:11 -0800)] 
Prevent users from defining instances for abstract classes.

Summary:
Fixes #13068.

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

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

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

2 years agoFix roles merging to apply only to non-rep-injective types.
Edward Z. Yang [Wed, 1 Mar 2017 07:55:00 +0000 (23:55 -0800)] 
Fix roles merging to apply only to non-rep-injective types.

Test Plan: validate

Reviewers: simonpj

Subscribers:

2 years agoProperly represent abstract classes in Class and IfaceDecl
Edward Z. Yang [Tue, 28 Feb 2017 07:48:30 +0000 (23:48 -0800)] 
Properly represent abstract classes in Class and IfaceDecl

Summary:
Previously, abstract classes looked very much like normal
classes, except that they happened to have no methods,
superclasses or ATs, and they came from boot files.  This
patch gives abstract classes a proper representation in
Class and IfaceDecl, by moving the things which are never
defined for abstract classes into ClassBody/IfaceClassBody.

Because Class is abstract, this change had ~no disruption
to any of the code in GHC; if you ask about the methods of
an abstract class, we'll just give you an empty list.

This also fixes a bug where abstract type classes were incorrectly
treated as representationally injective (they're not!)

Fixes #13347, and a TODO in the code.

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

Reviewers: simonpj, bgamari, austin

Subscribers: goldfire, thomie

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

2 years agoInjective type families imply nominal injectivity, but NOT rep inj
Edward Z. Yang [Mon, 27 Feb 2017 05:10:15 +0000 (21:10 -0800)] 
Injective type families imply nominal injectivity, but NOT rep inj

Test Plan: validate

Reviewers: simonpj, austin, jstolarek, bgamari, goldfire

Subscribers: thomie

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

2 years agoDisallow non-nullary constraint synonyms on class.
Edward Z. Yang [Mon, 27 Feb 2017 23:52:27 +0000 (15:52 -0800)] 
Disallow non-nullary constraint synonyms on class.

Test Plan: validate

Reviewers: simonpj, bgamari, austin

Subscribers: thomie

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

2 years agoMore comments on role subtyping, unsoundness fix.
Edward Z. Yang [Mon, 27 Feb 2017 04:15:30 +0000 (20:15 -0800)] 
More comments on role subtyping, unsoundness fix.

Summary:
- We incorrectly allowed subroling on injective data in
  some cases. There is now a test to check for this case, and a Note.

- More commentary on how the subtyping with roles works.

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

Reviewers: goldfire, austin, simonpj, bgamari

Subscribers: thomie

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

2 years agoExtend Windows runtime loader libsearch
Tamar Christina [Thu, 2 Mar 2017 20:14:34 +0000 (15:14 -0500)] 
Extend Windows runtime loader libsearch

This adds `.obj` extension to the list of valid
object file (we really shouldn't be using extensions
but instead trying to read the file and see if the header
makes sense.). Microsoft compilers use .obj instead of .o
for object files.

This also adds support to finding static archives when the
"lib" prefix is already in the filename. e.g. `-llibfoo` to
find `libfoo.a`. This is inline with binutils.

Test Plan: ./validate

Reviewers: simonmar, erikd, bgamari, hvr, austin

Reviewed By: bgamari

Subscribers: RyanGlScott, thomie, #ghc_windows_task_force

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

2 years agoProhibit RULES changing constructors
David Feuer [Thu, 2 Mar 2017 20:01:26 +0000 (15:01 -0500)] 
Prohibit RULES changing constructors

Previously, `RULES` like

```
{-# RULES
"JustNothing" forall x . Just x = Nothing
 #-}
```

were allowed. Simon Peyton Jones say this seems to have been a
mistake, that such rules have never been supported intentionally,
and that he doesn't know if they can break in horrible ways.
Furthermore, Ben Gamari and Reid Barton are considering trying to
detect the presence of "static data" that the simplifier doesn't
need to traverse at all. Such rules do not play well with that.
So for now, we ban them altogether. In most cases, it's possible
to work around the ban using hand-written wrapper functions.

Reviewers: austin, simonpj, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

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

2 years agoEliminate ListSetOps from imp_trust_pkgs
David Feuer [Thu, 2 Mar 2017 18:45:27 +0000 (13:45 -0500)] 
Eliminate ListSetOps from imp_trust_pkgs

Eliminate ListSetOps from imp_trust_pkgs and imp_dep_pkgs

Replace Map with NameEnv in TmOracle

Reviewers: austin, dfeuer, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoUser manual: Fix GADT paper link
Ömer Sinan Ağacan [Thu, 2 Mar 2017 19:44:56 +0000 (22:44 +0300)] 
User manual: Fix GADT paper link

2 years agotestsuite: Mark T13340 as fixed
Ben Gamari [Thu, 2 Mar 2017 18:09:30 +0000 (13:09 -0500)] 
testsuite: Mark T13340 as fixed

It was fixed by 55efc9718b520ef354e32c15c4b49cdfecce412f

2 years agoProperly acquire locks on not yet existing package databases
Andrzej Rybczak [Thu, 2 Mar 2017 16:26:09 +0000 (11:26 -0500)] 
Properly acquire locks on not yet existing package databases

Reviewers: austin, bgamari, angerman

Reviewed By: bgamari, angerman

Subscribers: angerman, thomie

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

2 years agoSymbolExtras: A bit of spring cleaning
Ben Gamari [Thu, 2 Mar 2017 16:20:12 +0000 (11:20 -0500)] 
SymbolExtras: A bit of spring cleaning

Const-hygiene and use bool when possible.

2 years agoTypeable: Rename KindRep bindings to $krep...
Ben Gamari [Wed, 1 Mar 2017 16:29:10 +0000 (11:29 -0500)] 
Typeable: Rename KindRep bindings to $krep...

2 years agoBump bytes allocated for T12234
David Feuer [Thu, 2 Mar 2017 16:30:48 +0000 (11:30 -0500)] 
Bump bytes allocated for T12234

Reviewers: austin, bgamari

Subscribers: mpickering, thomie

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

2 years agoFix expected result from T13143
David Feuer [Thu, 2 Mar 2017 16:29:39 +0000 (11:29 -0500)] 
Fix expected result from T13143

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoDocument interaction between ApplicativeDo and existentials (#13242)
Simon Marlow [Wed, 1 Mar 2017 14:47:24 +0000 (14:47 +0000)] 
Document interaction between ApplicativeDo and existentials (#13242)

Test Plan: validate

Reviewers: austin, bgamari, erikd

Subscribers: thomie

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

2 years agoUpgrade UniqSet to a newtype
David Feuer [Wed, 1 Mar 2017 18:47:39 +0000 (13:47 -0500)] 
Upgrade UniqSet to a newtype

The fundamental problem with `type UniqSet = UniqFM` is that `UniqSet`
has a key invariant `UniqFM` does not. For example, `fmap` over
`UniqSet` will generally produce nonsense.

* Upgrade `UniqSet` from a type synonym to a newtype.

* Remove unused and shady `extendVarSet_C` and `addOneToUniqSet_C`.

* Use cached unique in `tyConsOfType` by replacing
  `unitNameEnv (tyConName tc) tc` with `unitUniqSet tc`.

Reviewers: austin, hvr, goldfire, simonmar, niteria, bgamari

Reviewed By: niteria

Subscribers: thomie

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

2 years agoChange catch# demand signature
David Feuer [Wed, 1 Mar 2017 06:14:13 +0000 (01:14 -0500)] 
Change catch# demand signature

* Give `catch#` a lazy demand signature, to make it more honest.

* Make `catchException` and `catchAny` force their arguments so they
actually behave as advertised.

* Use `catch` rather than `catchException` in `forkIO`, `forkOn`, and
`forkOS` to avoid losing exceptions.

Fixes #13330

Reviewers: rwbarton, simonpj, simonmar, bgamari, hvr, austin

Subscribers: thomie

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

2 years agorts: Fix build
Ben Gamari [Wed, 1 Mar 2017 03:40:35 +0000 (22:40 -0500)] 
rts: Fix build

I evidently neglected to consider that validate doesn't build profiled
ways. Arg.

2 years agoUpdate containers again
David Feuer [Wed, 1 Mar 2017 03:27:14 +0000 (22:27 -0500)] 
Update containers again

submodule update

Get the version with `COMPLETE` pragmas for `Data.Sequence`.

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoMove isJoinId, isJoinId_maybe to Id
Simon Peyton Jones [Wed, 1 Mar 2017 01:39:02 +0000 (20:39 -0500)] 
Move isJoinId, isJoinId_maybe to Id

This is just a refactoring, moving these two functions where
they belong.

The reason they were there was because of the use of isJoinId_maybe
in the OutputableBndr instance of TaggedBndr, which was in CoreSyn.
I moved it to PprCore, to join the OutputableBndr instance for
Var.  That makes more sense anyway.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoMark non-recursive join lambdas as one-shot
Simon Peyton Jones [Wed, 1 Mar 2017 01:25:33 +0000 (20:25 -0500)] 
Mark non-recursive join lambdas as one-shot

When we have

  join j x y = rhs in ...

we know that the lambdas for 'x' and 'y' are one-shot.
Let's mark them as such!

This doesn't fix a specific bug, but it feels right to me.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: lukemaurer, thomie

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

2 years agoImprove SetLevels for join points
Simon Peyton Jones [Wed, 1 Mar 2017 01:23:15 +0000 (20:23 -0500)] 
Improve SetLevels for join points

C.f. Trac #13286, #13236

* Never destroy a join point unless it goes to top level
  See Note [Floating join point bindings]

* Never float a MFE if it has a free join variable
  Note [Free join points]

* Stop treating nullary join points specially

* Enforce the invariant that le_join_ceil >= le_ctxt_lvl
  (Needs more thought...)

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoImprove pretty-printing of types
Simon Peyton Jones [Wed, 1 Mar 2017 01:20:21 +0000 (20:20 -0500)] 
Improve pretty-printing of types

When doing debug-printing it's really important that the free vars
of a type are printed with their uniques.  The IfaceTcTyVar thing
was a stab in that direction, but it only worked for TcTyVars, not
TyVars.

This patch does it properly, by keeping track of the free vars of the
type when translating Type -> IfaceType, and passing that down through
toIfaceTypeX.  Then when we find a variable, look in that set, and
translate it to IfaceFreeTyVar if so.  (I renamed IfaceTcTyVar to
IfaceFreeTyVar.)

Fiddly but not difficult.

Reviewers: austin, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd VarSet.anyDVarSet, allDVarSet
Simon Peyton Jones [Wed, 1 Mar 2017 01:17:10 +0000 (20:17 -0500)] 
Add VarSet.anyDVarSet, allDVarSet

I need these in a later commit.

Also rename
  varSetAny  -->  anyVarSet
  varSetAll  -->  allVarSet
for consistency with other functions; eg filterVarSet

Reviewers: austin, goldfire, bgamari

Subscribers: niteria, thomie

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

2 years agoFix redundant import in CSE
David Feuer [Wed, 1 Mar 2017 00:46:35 +0000 (19:46 -0500)] 
Fix redundant import in CSE

2 years agoThe Early Inline Patch
Simon Peyton Jones [Tue, 28 Feb 2017 21:07:20 +0000 (16:07 -0500)] 
The Early Inline Patch

This very small patch switches on sm_inline even in the InitialPhase
(aka "gentle" phase).   There is no reason not to... and the results
are astonishing.

I think the peformance of GHC itself improves by about 5%; and some
programs get much smaller, quicker.  Result: across the board
irmprovements in
compile time performance.  Here are the changes in perf/compiler;
the numbers are decreases in compiler bytes-allocated:

  3%   T5837
  7%   parsing001
  9%   T12234
  35%  T9020
  9%   T3064
  13%  T9961
  20%  T13056
  5%   T9872d
  5%   T9872c
  5%   T9872b
  7%   T9872a
  5%   T783
  35%  T12227
  20%  T1969

Plus in perf/should_run

  5%   lazy-bs-alloc

It wasn't as easy as it sounds: I did a raft of preparatory work in
earlier patches.  But it's great!

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoCombine identical case alternatives in CSE
Simon Peyton Jones [Tue, 28 Feb 2017 21:00:49 +0000 (16:00 -0500)] 
Combine identical case alternatives in CSE

See Note [Combine case alternatives] in CSE.  This opportunity
surfaced when I was was studying early inlining.  It's easy (and
cheap) to exploit, and sometimes makes a worthwhile saving.

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agotestsuite: Bump down T5837 and T10370 allocations
Ben Gamari [Tue, 28 Feb 2017 19:32:52 +0000 (14:32 -0500)] 
testsuite: Bump down T5837 and T10370 allocations

2 years agoTry submodule bumps again
Ben Gamari [Tue, 28 Feb 2017 16:20:13 +0000 (11:20 -0500)] 
Try submodule bumps again

Bumps containers, time, and unix submodules.

This reverts commit c347a121b07d22fb91172337407986b6541e319d.

2 years agoAdd COMPLETE pragmas for TypeRep and ErrorCall pattern synonyms
Ryan Scott [Tue, 28 Feb 2017 16:11:48 +0000 (11:11 -0500)] 
Add COMPLETE pragmas for TypeRep and ErrorCall pattern synonyms

When programming with the pattern synonyms for `TypeRep`, I noticed that
I was receiving spurious non-exhaustive pattern-match warnings.  This
can be easily fixed by adding `COMPLETE` pragmas for them.

Moreover, there's another pattern synonym in `base`: `ErrorCall`. In
fact, in the original ticket for `COMPLETE` pragmas (#8779), someone
requested that `ErrorCall` be given a `COMPLETE` pragma as well
(https://ghc.haskell.org/trac/ghc/ticket/8779#comment:21).  I decided to
do that as well while I was in town.

Reviewers: bgamari, mpickering, austin, hvr

Reviewed By: bgamari

Subscribers: rwbarton, thomie

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

2 years agoDrop copy step from the rts/ghc.mk
Moritz Angermann [Tue, 28 Feb 2017 16:09:22 +0000 (11:09 -0500)] 
Drop copy step from the rts/ghc.mk

Recently I've used a different build system for building the
rts (Xcode).  And in doing so, I looked through the rts/ghc.mk
to figure out how to build the rts.

In general it's quite straight forward to just compile all the
c files with the proper flags.

However there is one rather awkward copy step that copies some
files for special handling for the rts way.

I'm wondering if the proposed solution in this diff is better
or worse than the current situation?

The idea is to keep the files, but use #includes to produce
identical files with just an additional define. It does however
produce empty objects for non threaded ways.

Reviewers: ezyang, bgamari, austin, erikd, simonmar, rwbarton

Reviewed By: bgamari, simonmar, rwbarton

Subscribers: rwbarton, thomie, snowleopard

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

2 years agoImprove documentation for CreateBCOs Message.
Moritz Angermann [Tue, 28 Feb 2017 16:08:55 +0000 (11:08 -0500)] 
Improve documentation for CreateBCOs Message.

After falling over the CreateBCOs message, and expecting it to contain
ByteStrings encoding `ResolvedBCO`s instead of `[ResolvedBCO]`s, when
deubbing issues with iserv, I'd like to extend the documentation here
a bit, so the next one won't fall over it.

Reviewers: simonmar, austin, rwbarton, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoiOS: shared objects have .dylib extension.
Moritz Angermann [Tue, 28 Feb 2017 16:07:45 +0000 (11:07 -0500)] 
iOS: shared objects have .dylib extension.

Reviewers: austin, rwbarton, bgamari

Reviewed By: rwbarton

Subscribers: thomie

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

2 years agoconfig.mk.in: Disable terminfo support on iOS
Ben Gamari [Tue, 28 Feb 2017 16:01:01 +0000 (11:01 -0500)] 
config.mk.in: Disable terminfo support on iOS

Test Plan: Validate

Reviewers: angerman, austin, rwbarton

Subscribers: thomie, snowleopard

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

2 years agoInline data constructor wrappers in phase 2 only
Simon Peyton Jones [Tue, 28 Feb 2017 19:04:40 +0000 (14:04 -0500)] 
Inline data constructor wrappers in phase 2 only

This patch prepares for my upcoming early-inlining patch. It arranges
that data constructor wrappers are not inlined until Phase 2 (the
first of the "normal" phases.)  That gives rules a chance to fire
in the InitialPhase (aka "gentle").

This has been a bit of a problem for a while, so it's nice to have
a fix.  It should make no difference immediately, becuase currently
nothing is inlined in the InitialPhase anyway.

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoMake Specialise work with casts
Simon Peyton Jones [Tue, 28 Feb 2017 17:11:33 +0000 (12:11 -0500)] 
Make Specialise work with casts

With my upcoming early-inlining patch it turned out that Specialise
was getting stuck on casts.  This patch fixes it; see Note
[Account for casts in binding] in Specialise.

Reviewers: austin, goldfire, bgamari

Subscribers: thomie

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

2 years agoAgain disable stage0 terminfo on Windows
Ben Gamari [Tue, 28 Feb 2017 16:04:40 +0000 (11:04 -0500)] 
Again disable stage0 terminfo on Windows

This accidentally regressed in D3177.

2 years agorts: Allow profile output path to be specified on RTS command line
Ben Gamari [Tue, 28 Feb 2017 14:31:06 +0000 (09:31 -0500)] 
rts: Allow profile output path to be specified on RTS command line

This introduces a RTS option, -po, which allows the user to override the stem
used to form the output file names of the heap profile and cost center summary.

It's a bit unclear to me whether this is really the interface we want.
Alternatively we could just allow the user to specify the `.hp` and `.prof` file
names separately. This would arguably be a bit more straightforward and would
allow the user to name JSON output with an appropriate `.json` suffix if they so
desired. However, this would come at the cost of taking more of the option
space, which is a somewhat precious commodity.

Test Plan: Validate, try using `-po` RTS option

Reviewers: simonmar, austin, erikd

Reviewed By: simonmar

Subscribers: thomie

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

2 years agoAdd flag allowing convenient disabling of terminfo support
Ben Gamari [Tue, 28 Feb 2017 14:27:04 +0000 (09:27 -0500)] 
Add flag allowing convenient disabling of terminfo support

This is a common thing that users who cross-compile must fight against.
It turns out that it's pretty straightforward to make is convenient.

Test Plan: Cross compile without a target `ncurses` available

Reviewers: danharaj, hvr, erikd, austin, rwbarton

Subscribers: rwbarton, thomie, snowleopard

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

2 years agoSmall changes to expression sizing in CoreUnfold
Simon Peyton Jones [Mon, 27 Feb 2017 22:14:32 +0000 (17:14 -0500)] 
Small changes to expression sizing in CoreUnfold

The only significant change here is that

   case e of {}

should be treated like 'e', rather than like a case expression.
We don't push a return address, for example, since 'e' is sure to
diverge.

I forget why I did this; but it will make these empty-case expressions
(which are only there to satisfy the type checker) cost-free.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoWhen floating, don't box an expression that's okay for speculation (#13338)
Reid Barton [Mon, 27 Feb 2017 22:13:24 +0000 (17:13 -0500)] 
When floating, don't box an expression that's okay for speculation (#13338)

Commit 432f952e (Float unboxed expressions by boxing) lets the float-out pass
turn, for example,

    ... (-# (remInt# x# 100000#) i#) ...

into

    let lvl :: Int
        lvl = case remInt# x# 100000# of v { __DEFAULT__ -> I# v }
    in ... (-# (case lvl of { I# v -> v }) i#) ...

But when, as in the example above, the expression that was floated out was
the argument of an application, the resulting application may no longer
satisfy the let/app invariant, because exprOkForSpeculation doesn't look
far enough inside the definition of lvl.

Solution: When the expression we floated out was okay for speculation, don't
bother boxing it. It will be evaluated earlier, and that's okay by assumption.
Fixes the let/app invariant and is cheaper too.

Test Plan: make slowtest TEST=T13338

Reviewers: austin, bgamari, simonpj

Reviewed By: bgamari, simonpj

Subscribers: thomie

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

2 years agoAdd Eq instances for TrName, Module
Ben Gamari [Mon, 27 Feb 2017 22:12:04 +0000 (17:12 -0500)] 
Add Eq instances for TrName, Module

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

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

2 years agobase: Expose Module from Type.Reflection
Ben Gamari [Mon, 27 Feb 2017 22:09:18 +0000 (17:09 -0500)] 
base: Expose Module from Type.Reflection

There is no reason why this can't be safely exported.

Test Plan: Validate

Reviewers: austin, hvr

Subscribers: thomie

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

2 years agoconfigure: detect whether -lpthreads is necessary for pthreads
Ben Gamari [Mon, 27 Feb 2017 00:28:08 +0000 (19:28 -0500)] 
configure: detect whether -lpthreads is necessary for pthreads

Some platforms have pthreads support available without linking against
libpthread (and indeed don't even offer a libpthread to link against).
One example of this is Android's bionic library. Teach the RTS about
this case.

Test Plan: Validate while cross-compiling targetting Android on aarch64

Reviewers: simonmar, austin, hvr, erikd, rwbarton

Subscribers: danharaj, thomie, erikd, snowleopard

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

2 years agoDmdAnal: Clarify reference to Cardinality Analysis paper
Ben Gamari [Sun, 26 Feb 2017 23:45:14 +0000 (18:45 -0500)] 
DmdAnal: Clarify reference to Cardinality Analysis paper

2 years agoClear import path in --backpack mode to not accidentally pick up source files.
Edward Z. Yang [Fri, 24 Feb 2017 07:35:42 +0000 (23:35 -0800)] 
Clear import path in --backpack mode to not accidentally pick up source files.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix Mac OS X timestamp resolution bug.
Edward Z. Yang [Mon, 27 Feb 2017 23:15:37 +0000 (15:15 -0800)] 
Fix Mac OS X timestamp resolution bug.

Test Plan: validate

Reviewers: bgamari, austin

Subscribers: thomie

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

2 years agoFix windows build broken by D3080 (0d86aa5904e5a06c93632357122e57e4e118fd2a)
Tamar Christina [Tue, 28 Feb 2017 06:21:17 +0000 (06:21 +0000)] 
Fix windows build broken by D3080 (0d86aa5904e5a06c93632357122e57e4e118fd2a)

2 years agoStop uniques ending up in SPEC rule names
Simon Peyton Jones [Mon, 27 Feb 2017 14:09:26 +0000 (09:09 -0500)] 
Stop uniques ending up in SPEC rule names

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoExplicitly capture whether a splice has a dollar prefix
Alan Zimmerman [Mon, 27 Feb 2017 09:43:01 +0000 (11:43 +0200)] 
Explicitly capture whether a splice has a dollar prefix

A top-level splice can be written

    $splice

or

    splice

For accurate pretty-printing, and for ghc-exactprint, capture in the hsSyn AST
which variant was parsed.

2 years agoOccurrence-analyse the result of rule firings
Simon Peyton Jones [Mon, 27 Feb 2017 03:17:02 +0000 (22:17 -0500)] 
Occurrence-analyse the result of rule firings

When studying simplCore/should_compile/T7785 I found that a long
chain of maps

  map f (map f (map f (map f (...))))

took an unreasonably long time to simplify.  The problem got
worse when I started inlining in the InitialPhase, which is how
I stumbled on it.

The solution turned  out to be rather simple.  It's described in

   Note [Occurence-analyse after rule firing]

in Simplify.hs

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd -fspec-constr-keen
Simon Peyton Jones [Mon, 27 Feb 2017 02:53:31 +0000 (21:53 -0500)] 
Add -fspec-constr-keen

I discovered that the dramatic imprvoement in perf/should_run/T9339
with the introduction of join points was really rather a fluke, and
very fragile.

The real problem (see Note [Making SpecConstr keener]) is that
SpecConstr wasn't specialising a function even though it was applied
to a freshly-allocated constructor.  The paper describes plausible
reasons for this, but I think it may well be better to be a bit more
aggressive.

So this patch add -fspec-constr-keen, which makes SpecConstr a bit
keener to specialise, by ignoring whether or not the argument
corresponding to a call pattern is scrutinised in the function body.
Now the gains in T9339 should be robust; and it might even be a
better default.

I'd be interested in what happens if we switched on -fspec-constr-keen
with -O2.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoRefactor floating of bindings (fiBind)
Simon Peyton Jones [Mon, 27 Feb 2017 02:45:00 +0000 (21:45 -0500)] 
Refactor floating of bindings (fiBind)

This is just a local refactoring.

I originally planned to try floating top-level bindings inwards,
but I backed off from that leaving only this (harmless) refactoring,
which has no behavioural effect.

I also make FloatIn into a ModGuts -> ModGuts function; again not
necessary now, but no harm either.

My attempt also used the new function CoreFVs.freeVarsBind; but
that too is a plausible refactorig of freeVars, so I left it in too.

Reviewers: austin, bgamari

Subscribers: thomie

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

2 years agoSubtyping for roles in signatures.
Edward Z. Yang [Fri, 10 Feb 2017 08:38:34 +0000 (00:38 -0800)] 
Subtyping for roles in signatures.

Summary:
This commit implements the plan in #13140:

* Today, roles in signature files default to representational. Let's change the
  default to nominal, as this is the most flexible implementation side. If a
  client of the signature needs to coerce with a type, the signature can be
  adjusted to have more stringent requirements.

* If a parameter is declared as nominal in a signature, it can be implemented
  by a data type which is actually representational.

* When merging abstract data declarations, we take the smallest role for every
  parameter. The roles are considered fix once we specify the structure of an
  ADT.

* Critically, abstract types are NOT injective, so we aren't allowed to
  make inferences like "if T a ~R T b, then a ~N b" based on the nominal
  role of a parameter in an abstract type (this would be unsound if the
  parameter ended up being phantom.)  This restriction is similar to the
  restriction we have on newtypes.

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

Reviewers: simonpj, bgamari, austin, goldfire

Subscribers: goldfire, thomie

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

2 years agoTreat all TyCon with hole names as skolem abstract.
Edward Z. Yang [Fri, 24 Feb 2017 23:58:09 +0000 (15:58 -0800)] 
Treat all TyCon with hole names as skolem abstract.

Summary:
Fixes #13335.

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

Reviewers: goldfire, austin, simonpj, bgamari

Subscribers: thomie

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

2 years agoRemove outdated information about main() in HSrts (#1)
Ben Gamari [Sun, 26 Feb 2017 22:34:09 +0000 (17:34 -0500)] 
Remove outdated information about main() in HSrts (#1)

The main method is not contained in HSrts so the removed section is no longer valid.

2 years agotests: remove extra_files.py (#12223)
Reid Barton [Sat, 25 Feb 2017 02:14:50 +0000 (21:14 -0500)] 
tests: remove extra_files.py (#12223)

The script I used is included as testsuite/driver/kill_extra_files.py,
though at this point it is for mostly historical interest.

Some of the tests in libraries/hpc relied on extra_files.py, so this
commit includes an update to that submodule.

One test in libraries/process also relies on extra_files.py, but we
cannot update that submodule so easily, so for now we special-case it
in the test driver.

2 years agotests: manually move some extra_files into *.T files
Reid Barton [Sat, 25 Feb 2017 01:56:19 +0000 (20:56 -0500)] 
tests: manually move some extra_files into *.T files

Some of the *.T files were in libraries/hpc, so this contains an
update to that submodule.

2 years agoRemove extra_files entries for deleted tests
Reid Barton [Sat, 25 Feb 2017 01:16:46 +0000 (20:16 -0500)] 
Remove extra_files entries for deleted tests

2 years agoManually move extra_files for tests T9579_*
Reid Barton [Sat, 25 Feb 2017 00:58:03 +0000 (19:58 -0500)] 
Manually move extra_files for tests T9579_*

Summary: My script won't understand this.

Test Plan: validate

Reviewers: austin, bgamari, simonmar

Subscribers: thomie

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

2 years agoBump hpc submodule to allow time-1.8
Reid Barton [Sat, 25 Feb 2017 02:56:51 +0000 (21:56 -0500)] 
Bump hpc submodule to allow time-1.8

2 years agoEnsure that Literals are in range
Joachim Breitner [Sun, 26 Feb 2017 21:27:52 +0000 (16:27 -0500)] 
Ensure that Literals are in range

This commit fixes several bugs related to case expressions
involving numeric literals which are not in the range of values of
their (fixed-width, integral) type.

There is a new invariant on Literal: The argument of a MachInt[64]
or MachWord[64] must lie within the range of the corresponding
primitive type Int[64]# or Word[64]#, as defined by the target machine.
This invariant is enforced in mkMachInt[64]/mkMachWord[64] by wrapping
the argument to the target type's range if necessary.

Test Plan: Test Plan: make slowtest TEST="T9533 T9533b T9533c T10245
T10246"

Trac issues: #9533, #10245, #10246, #13171

Reviewers: simonmar, simonpj, austin, bgamari, nomeata

Reviewed By: bgamari

Subscribers: thomie, rwbarton

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

2 years agoAdd support for concurrent package db access and updates
Andrzej Rybczak [Sun, 26 Feb 2017 21:25:17 +0000 (16:25 -0500)] 
Add support for concurrent package db access and updates

Trac issues: #13194

Reviewers: austin, hvr, erikd, bgamari, dfeuer, duncan

Subscribers: DemiMarie, dfeuer, thomie

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

2 years agousers-guide: Add documentation for JSON profile format
Ben Gamari [Sun, 26 Feb 2017 21:21:09 +0000 (16:21 -0500)] 
users-guide: Add documentation for JSON profile format

Reviewers: austin

Subscribers: thomie

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

2 years agoMove Typeable Binary instances to binary package
Ben Gamari [Thu, 9 Feb 2017 04:00:46 +0000 (23:00 -0500)] 
Move Typeable Binary instances to binary package

Bumps binary submodule.

2 years agoCoercion: Try dropping constraintIsLifted axiom
Ben Gamari [Sun, 26 Feb 2017 20:33:54 +0000 (15:33 -0500)] 
Coercion: Try dropping constraintIsLifted axiom

While working through the FunCo patch I encountered some lint issues
which suggested that `Constraint` wasn't being considered equal to `TYPE
'LiftedRep`.  Consequently I introduced this axiom and associated messy
ball of logic to explicitly coerce `Constraint`.

However, as @goldfire points out on D3208 this really shouldn't be
necessary.  Indeed, I tried ripping out the axiom and things appear to
just work. I suspect the issue motivating the axiom was a bug elsewhere
in the FunCo branch that I fixed during development.

Test Plan: Validate

Reviewers: simonpj, goldfire, austin

Reviewed By: goldfire

Subscribers: thomie, goldfire

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

2 years agobuild system: Persist CrossCompiling in binary distributions
Ben Gamari [Sun, 26 Feb 2017 20:32:59 +0000 (15:32 -0500)] 
build system: Persist CrossCompiling in binary distributions

The build system uses the CrossCompiling variable to decide whether or
not we should build various packages that must be built using the
compiler.  Consequently, it is important that we persist its value in
the binary distribution so we know during `make install` not to go
looking for files that would have been built for these packages. Failing
to do this causes #13325.

Test Plan: Cross compile, `make binary-dist`, and try installing the
binary distribution on the target

Reviewers: hvr, austin, trofi, rwbarton

Reviewed By: trofi, rwbarton

Subscribers: carter, trofi, rwbarton, erikd, thomie, snowleopard, davean

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

2 years agoFix SetLevels for makeStaticPtr
Simon Peyton Jones [Sun, 26 Feb 2017 18:51:57 +0000 (13:51 -0500)] 
Fix SetLevels for makeStaticPtr

This too is prepartory for my early-inlining patch.  It turned
out that early inlining exposed a bug in the way that static
pointers were being floated.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoChange -ddump-tc-trace output in TcErrors, slightly
Simon Peyton Jones [Sun, 26 Feb 2017 18:50:02 +0000 (13:50 -0500)] 
Change -ddump-tc-trace output in TcErrors, slightly

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoUpdate OverloadedLabels docs and document HasField
Adam Gundry [Sun, 26 Feb 2017 18:46:18 +0000 (13:46 -0500)] 
Update OverloadedLabels docs and document HasField

Test Plan: n/a

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoBring sanity to openTempFile
Ben Gamari [Sun, 26 Feb 2017 18:44:44 +0000 (13:44 -0500)] 
Bring sanity to openTempFile

Test Plan: Run test of `openTempFile` under `strace` to verify
reasonably random filenames

Reviewers: austin, hvr, trofi, rwbarton

Reviewed By: trofi, rwbarton

Subscribers: rwbarton, thomie

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

2 years agoAdd testcase for #13340
Ben Gamari [Sun, 26 Feb 2017 18:43:48 +0000 (13:43 -0500)] 
Add testcase for #13340

Test Plan: Validate

Reviewers: rwbarton, austin

Reviewed By: rwbarton

Subscribers: thomie

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

2 years agotestsuite: Bump down T2762 number
Ben Gamari [Sun, 26 Feb 2017 17:56:03 +0000 (12:56 -0500)] 
testsuite: Bump down T2762 number

Although I'm really not convinced that measuring peak_megabytes_allocated of
this test is reasonable.

2 years agorts: Usage message wibbles
Ben Gamari [Fri, 24 Feb 2017 00:04:40 +0000 (19:04 -0500)] 
rts: Usage message wibbles

2 years agoLoad `pthreads` by default on Windows
Tamar Christina [Thu, 23 Feb 2017 23:34:33 +0000 (18:34 -0500)] 
Load `pthreads` by default on Windows

The GCC Bindists that we use compile with `pthread` enabled by default.
This means that on every link the dll is passed as a dependency by the
driver. Lots of packages depend on it but the runtime linker doesn't
provide it by default making compiled code work but not interpreted.

Following D3028 `pthreads` would be provided by default ONLY when linked
dynamicly, which we don't support yet (See D2592). Until this is the
case we need to manually provide `libpthreads`.

Test Plan: ./validate

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

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

2 years agoMake list of deprecated symbols on Windows weak.
Tamar Christina [Thu, 23 Feb 2017 23:33:15 +0000 (18:33 -0500)] 
Make list of deprecated symbols on Windows weak.

We have a unfortunate workaround in place for the fact that most
packages out there use POSIX names for symbols even on Windows.  This
means that we have to recognize e.g. both `_ungetch` and `ungetch`.

The former is the actual symbol name on windows and the latter is the
POSIX variant. The problem is that on normal windows programs `ungetch`
should not be in the global namespace.

To work around this, we now mark the deprecated symbols as weak symbols
in the global namespace. This provides the flexibility we need:

* If you use the symbol without defining it, we assume you meant to use
  the POSIX variant.
* If you actually define the symbol, we'll hence forth use that
  definition and assume you didn't mean to use POSIX code. This is how
  MingW64's wrapper also works.

This requires D3028.

Fixes #13210.

Test Plan: ./validate

Reviewers: austin, bgamari, erikd, simonmar

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

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

2 years agoLoad dependent dlls.
Tamar Christina [Thu, 23 Feb 2017 23:32:28 +0000 (18:32 -0500)] 
Load dependent dlls.

When the `GCC` driver envokes the pipeline a `SPEC` is used to determine
how to configure the compiler and which libraries to pass along.

For Windows/mingw, this specfile is
https://github.com/gcc-mirror/gcc/blob/master/gcc/config/i386/mingw32.h

This has a lot of interesting things that we need to emulate in order to
be able to link as many things out of the box as GCC. In particular this
is why you never need to specify `-lgcc_s` when compiling, but you do
when using `GHCi`.

Unfortunately due to time constraints I can't set up the framework
required in `GHC` to do this before the feature freeze.

So I suggest this alternate implementation:
When we load a dll, also bring it's dependencies into scope of the
interpeter.

This has pros and cons. Pro is, we'll fix many packages on hackage which
specify just `-lstdc++`. Since this points to `libstdc++-6.dll` which
will bring `libgcc` into scope.

The downside is, we'll be more lenient than GCC, in that the interpreter
will link much easier since it has implicit dependencies in scope.
Whereas for compilation to work you will have to specify it as an
argument to GHC.

This will make the Windows runtime linker more consistent with the unix
ones. The difference in semantics came about because of the differences
between `dlsym` and `GetProcAddress`.  The former seems to search the
given library and all it's dependencies, while the latter only searches
the export table of the library. So we need some extra manual work to
search the dependencies which this patch provides.

Test Plan:
```
./validate
```
```
$ echo :q | inplace/bin/ghc-stage2.exe --interactive +RTS -Dl -RTS
-lstdc++ 2>&1 | grep "Loading dependency"
```

```
$ echo :q | ../inplace/bin/ghc-stage2.exe --interactive -lstdc++ +RTS
-Dl -RTS 2>&1 | grep "Loading dependency"
Loading dependency *.exe -> GDI32.dll.
Loading dependency GDI32.dll -> ntdll.dll.
Loading dependency *.exe -> KERNEL32.dll.
Loading dependency KERNEL32.dll -> KERNELBASE.dll.
Loading dependency *.exe -> msvcrt.dll.
Loading dependency *.exe -> SHELL32.dll.
Loading dependency SHELL32.dll -> USER32.dll.
Loading dependency USER32.dll -> win32u.dll.
Loading dependency *.exe -> WINMM.dll.
Loading dependency WINMM.dll -> WINMMBASE.dll.
Loading dependency *.exe -> WSOCK32.dll.
Loading dependency WSOCK32.dll -> WS2_32.dll.
Loading dependency WS2_32.dll -> RPCRT4.dll.
Loading dependency libstdc++-6.dll -> libwinpthread-1.dll.
Loading dependency libstdc++-6.dll -> libgcc_s_seh-1.dll.
```

Trac tickets: #13093, #13189

Reviewers: simonmar, rwbarton, austin, bgamari, erikd

Reviewed By: bgamari

Subscribers: rwbarton, RyanGlScott, thomie, #ghc_windows_task_force

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

2 years agoBring in unicode variants of API Annotations for HsBracket
Alan Zimmerman [Sun, 26 Feb 2017 12:18:44 +0000 (14:18 +0200)] 
Bring in unicode variants of API Annotations for HsBracket

2 years agoRename compact to ghc-compact.
Edward Z. Yang [Thu, 23 Feb 2017 21:46:02 +0000 (13:46 -0800)] 
Rename compact to ghc-compact.

Summary:
The plan is to release a separate library, 'compact', which gives a
friendly user-facing interface.  This library is just enough so that we
can make sure the functionality is working in GHC.

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

Reviewers: bgamari, dfeuer, austin, simonmar, hvr

Subscribers: thomie, erikd, snowleopard

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

2 years agoCorrectly pretty print a wild card in infix position
Alan Zimmerman [Sat, 25 Feb 2017 13:42:40 +0000 (15:42 +0200)] 
Correctly pretty print a wild card in infix position

2 years agoDelete redundant import.
Edward Z. Yang [Sat, 25 Feb 2017 02:47:47 +0000 (18:47 -0800)] 
Delete redundant import.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoFix validate.
Edward Z. Yang [Sat, 25 Feb 2017 02:06:58 +0000 (18:06 -0800)] 
Fix validate.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoRecord full FieldLabel in ifConFields.
Edward Z. Yang [Thu, 23 Feb 2017 04:32:41 +0000 (20:32 -0800)] 
Record full FieldLabel in ifConFields.

Summary:
The previous implementation tried to be "efficient" by
storing field names once in IfaceConDecls, and only just
enough information for us to reconstruct the FieldLabel.
But this came at a bit of code complexity cost.

This patch undos the optimization, instead storing a full
FieldLabel at each data constructor.  Consequently, this fixes
bugs #12699 and #13250.

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

Reviewers: adamgundry, bgamari, austin

Subscribers: thomie

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

2 years agoDocument AMP as a Report deviation
David Feuer [Fri, 24 Feb 2017 18:45:00 +0000 (13:45 -0500)] 
Document AMP as a Report deviation

`Applicative` as a superclass of `Monad` is non-standard.

Fixes #13196.

[skip ci]

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd a comment explaining CompleteMatchSig in HsBinds
Matthew Pickering [Fri, 24 Feb 2017 17:37:19 +0000 (17:37 +0000)] 
Add a comment explaining CompleteMatchSig in HsBinds

[skip ci]

2 years agoMake SCCFunSig tag Located for ghc-exactprint
Alan Zimmerman [Fri, 24 Feb 2017 16:57:51 +0000 (18:57 +0200)] 
Make SCCFunSig tag Located for ghc-exactprint

2 years agoAdd API Annotation AnnSignature for backpack signature modules
Alan Zimmerman [Fri, 24 Feb 2017 11:00:28 +0000 (13:00 +0200)] 
Add API Annotation AnnSignature for backpack signature modules

2 years agoMake exprIsConApp_maybe work better for literals strings
Simon Peyton Jones [Thu, 23 Feb 2017 14:41:08 +0000 (14:41 +0000)] 
Make exprIsConApp_maybe work better for literals strings

There are two things here

* Use exprIsLiteral_maybe to "look through" a variable bound
  to a literal string.

* Add CONLIKE to the NOINLINE pragma for unpackCString# and
  unpackCStringUtf8#

See Trac #13317, Trac #10844, and
Note [exprIsConApp_maybe on literal strings] in CoreSubst

I did a nofib run and got essentially zero change except for one
2.2% improvement in allocation for 'pretty'.

2 years agoAdd instances for (:~~:) mirroring those for (:~:)
Ryan Scott [Thu, 23 Feb 2017 23:09:58 +0000 (18:09 -0500)] 
Add instances for (:~~:) mirroring those for (:~:)

`(:~~:)`, the hetergeneous version of `(:~:)`, should have class
instances similar to those of `(:~:)`, especially since their
implementations aren't particularly tricky or surprising. This adds
them.

Reviewers: bgamari, austin, hvr, goldfire

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoCorrect Windows libdir assumptions.
Tamar Christina [Thu, 23 Feb 2017 23:07:19 +0000 (18:07 -0500)] 
Correct Windows libdir assumptions.

GHC and ghc-pkg make some pretty hard assumptions about where they're
running on Windows. They assume that they are always running from
`foo/bin/ghc.exe` and that to find the `lib` folder they can drop
`bin/ghc.exe` from the base path and append `lib`.

This is already false for the testsuite, which when testing thenbindist
 has one test which puts the binaries in `inplace/test   spaces`.

For some reason before this was either being skipped or mysteriously
passing.
But as of `2017.02.11` our luck ran out.

the testsuite triggers a failure such as those in #13310

Let's soften the assumption and just check that `../lib` exists instead.

80 chars

Test Plan: ./validate

Reviewers: austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

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