ghc.git
2 years agoBump performance mark for T9020
Joachim Breitner [Fri, 3 Feb 2017 16:38:16 +0000 (11:38 -0500)] 
Bump performance mark for T9020

according to the graph at perf.haskell.org, it has regressed due to join
points, which moved it very very close to the +10% mark and hence made it
fail just sometimes.

2 years agoGet rid of ProbOneShot
Joachim Breitner [Thu, 2 Feb 2017 17:52:57 +0000 (12:52 -0500)] 
Get rid of ProbOneShot

This fixes #13227. It remains to be seen what the performance impacts
are. Pushing as a branch to get perf.haskell.org answer that for us.

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

2 years agoDitch static flags
Sylvain Henry [Thu, 2 Feb 2017 19:37:24 +0000 (14:37 -0500)] 
Ditch static flags

This patch converts the 4 lasting static flags (read from the command
line and unsafely stored in immutable global variables) into dynamic
flags. Most use cases have been converted into reading them from a DynFlags.

In cases for which we don't have easy access to a DynFlags, we read from
'unsafeGlobalDynFlags' that is set at the beginning of each 'runGhc'.
It's not perfect (not thread-safe) but it is still better as we can
set/unset these 4 flags before each run when using GHC API.

Updates haddock submodule.

Rebased and finished by: bgamari

Test Plan: validate

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

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #8440

2 years agousers-guide: Explain behavior of verbose-core2core + dump-inlinings
Ben Gamari [Fri, 3 Feb 2017 01:17:08 +0000 (20:17 -0500)] 
users-guide: Explain behavior of verbose-core2core + dump-inlinings

2 years agoRemove INLINE pragma on loopbreaker
Matthew Pickering [Thu, 2 Feb 2017 21:00:39 +0000 (21:00 +0000)] 
Remove INLINE pragma on loopbreaker

2 years agoBump haskeline submodule
Ben Gamari [Thu, 2 Feb 2017 19:20:57 +0000 (14:20 -0500)] 
Bump haskeline submodule

2 years agoExhaustiveness check for EmptyCase (Trac #10746)
George Karachalias [Thu, 2 Feb 2017 18:51:33 +0000 (13:51 -0500)] 
Exhaustiveness check for EmptyCase (Trac #10746)

Empty case expressions have strict semantics so the problem boils down
to inhabitation checking for the type of the scrutinee. 3 main functions
added:

- pmTopNormaliseType_maybe for the normalisation of the scrutinee type

- inhabitationCandidates for generating the possible patterns of the
  appropriate type

- checkEmptyCase' to filter out the candidates that give rise to
  unsatisfiable constraints.

See Note [Checking EmptyCase Expressions] in Check
and Note [Type normalisation for EmptyCase] in FamInstEnv

Test Plan: validate

Reviewers: simonpj, goldfire, dfeuer, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

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

GHC Trac Issues: #10746

2 years agoAdd a testcase for #13227
Joachim Breitner [Thu, 2 Feb 2017 17:04:43 +0000 (12:04 -0500)] 
Add a testcase for #13227

where an expected float-out is not happening.

2 years agoSpelling fixes
Gabor Greif [Wed, 1 Feb 2017 10:29:47 +0000 (11:29 +0100)] 
Spelling fixes

2 years agoAdd support for StaticPointers in GHCi
Ben Gamari [Thu, 2 Feb 2017 04:39:52 +0000 (23:39 -0500)] 
Add support for StaticPointers in GHCi

Here we add support to GHCi for StaticPointers. This process begins by
adding remote GHCi messages for adding entries to the static pointer
table. We then collect binders needing SPT entries after linking and
send the interpreter a message adding entries with the appropriate
fingerprints.

Test Plan: `make test TEST=StaticPtr`

Reviewers: facundominguez, mboes, simonpj, simonmar, goldfire, austin,
hvr, erikd

Reviewed By: simonpj, simonmar

Subscribers: RyanGlScott, simonpj, thomie

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

GHC Trac Issues: #12356

2 years agoMake interface loading for COMPLETE pragmas lazy
Matthew Pickering [Thu, 2 Feb 2017 03:54:31 +0000 (22:54 -0500)] 
Make interface loading for COMPLETE pragmas lazy

Without this additional laziness we will loop forever trying
to find the definitions of the conlikes referenced in the pragma.

Fixes #13188

Reviewers: austin, RyanGlScott, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13188

2 years agoIntroduce GHC.TypeNats module, change KnownNat evidence to be Natural
Oleg Grenrus [Thu, 2 Feb 2017 03:49:17 +0000 (22:49 -0500)] 
Introduce GHC.TypeNats module, change KnownNat evidence to be Natural

Reviewers: dfeuer, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13181

2 years agoDon't tick top-level string literals
Ben Gamari [Thu, 2 Feb 2017 03:48:32 +0000 (22:48 -0500)] 
Don't tick top-level string literals

This fixes a regression due to D2605 (see #8472) wherein top-level primitive
strings would fail to be noticed by CoreToStg as they were wrapped in a
tick. This resulted in a panic in CoreToStg due to inconsistent CAF information
(or a Core Lint failure, if enabled). Here we document the invariant that
unlifted expressions can only sit at top-level if of the form `Lit (MachStr
...)` with no ticks or other embellishments. Moreover, we fix instance of
this in `Simplify.prepareRhs` and `FloatOut.wrapTick` where this
invariant was being broken.

Test Plan: Validate with `-g`. Run testsuite with `WAY=ghci`.

Reviewers: austin, simonpj

Reviewed By: simonpj

Subscribers: simonpj, akio, scpmw, thomie

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

2 years agobase: Derive Enum, Bounded for VecCount, VecElem
Ben Gamari [Thu, 2 Feb 2017 03:48:01 +0000 (22:48 -0500)] 
base: Derive Enum, Bounded for VecCount, VecElem

Test Plan: Validate

Reviewers: RyanGlScott, austin, hvr

Reviewed By: RyanGlScott

Subscribers: goldfire, RyanGlScott, thomie

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

2 years agoFix documentation NOTE about can_fail
Vladislav Zavialov [Wed, 1 Feb 2017 11:07:36 +0000 (14:07 +0300)] 
Fix documentation NOTE about can_fail

In the note it is explained why it's fine to discard a can_fail primop,
but the table erroneously says it's not fine.

2 years agotestsuite: Update allocations for T12234
Ben Gamari [Wed, 1 Feb 2017 20:45:20 +0000 (15:45 -0500)] 
testsuite: Update allocations for T12234

This has been failing on Darwin since 748b79741652028827b6225c36b8ab55d22bdeb0.

2 years agoJoin points
Luke Maurer [Wed, 1 Feb 2017 16:56:01 +0000 (11:56 -0500)] 
Join points

This major patch implements Join Points, as described in
https://ghc.haskell.org/trac/ghc/wiki/SequentCore.  You have
to read that page, and especially the paper it links to, to
understand what's going on; but it is very cool.

It's Luke Maurer's work, but done in close collaboration with Simon PJ.

This Phab is a squash-merge of wip/join-points branch of
http://github.com/lukemaurer/ghc. There are many, many interdependent
changes.

Reviewers: goldfire, mpickering, bgamari, simonmar, dfeuer, austin

Subscribers: simonpj, dfeuer, mpickering, Mikolaj, thomie

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

2 years agoRemove very broad ignore. [ci skip]
Tamar Christina [Wed, 1 Feb 2017 10:20:03 +0000 (10:20 +0000)] 
Remove very broad ignore. [ci skip]

Summary:
`.gitignore` contains a very broad ignore entry for `foo*`.
This has bitten us before and should probably be removed.

Reviewers: bgamari, austin

Subscribers: simonpj, thomie

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

2 years agoUpdate output of failing 11223 tests
Tamar Christina [Wed, 1 Feb 2017 06:41:48 +0000 (06:41 +0000)] 
Update output of failing 11223 tests

Summary: make accept new test output

Test Plan: make test TEST="T11223_link_order_a_b_2_fail T11223_simple_duplicate_lib"

Reviewers: austin, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

2 years agoTypos in note header and test
Gabor Greif [Tue, 31 Jan 2017 11:41:29 +0000 (12:41 +0100)] 
Typos in note header and test

2 years agoExport callStackDoc
Ben Gamari [Tue, 31 Jan 2017 21:12:30 +0000 (16:12 -0500)] 
Export callStackDoc

It's generally a pretty useful thing to have around.

[skip ci]

Test Plan: Build it

Reviewers: austin, dfeuer

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

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

2 years agouser-guide: fix links and file names (fixes #13198)
Takenobu Tani [Tue, 31 Jan 2017 21:07:48 +0000 (16:07 -0500)] 
user-guide: fix links and file names (fixes #13198)

There are some incorrect links and file names in GHC user's guide.

  * docs/users_guide/glasgow_exts.rst
    - GHC/Base.lhs
    - GHC/List.lhs

  * docs/users_guide/ffi-chap.rst
    - :base-ref:`Foreign`
    - :base-ref:`Control.Concurrent`

I fixed them.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13198

2 years agoAbstract over the way eventlogs are flushed
alexbiehl [Tue, 31 Jan 2017 21:06:33 +0000 (16:06 -0500)] 
Abstract over the way eventlogs are flushed

Currently eventlog data is always written to a file `progname.eventlog`.
This patch introduces the `flushEventLog` field in `RtsConfig` which
allows to customize the writing of eventlog data.

One possible scenario is the ongoing live-profile-monitor effort by
@NCrashed which slurps all eventlog data through `fluchEventLog`.

`flushEventLog` takes a buffer with eventlog data and its size and
returns `false` (0) in case eventlog data could not be procesed.

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: simonmar, bgamari

Subscribers: qnikst, thomie, NCrashed

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

2 years agoFloatOut: Allow floating through breakpoint ticks
Ben Gamari [Tue, 31 Jan 2017 21:05:26 +0000 (16:05 -0500)] 
FloatOut: Allow floating through breakpoint ticks

I believe this is actually a completely valid thing to do, despite the
arguments put forth in #10052. All that was missing was logic in
SetLevels to correctly substitute the cloned binders into the
breakpoint's free variable list.

This is a prerequisite for enabling StaticPointer support in the
interpreter.

Test Plan: Validate

Reviewers: austin, scpmw

Subscribers: thomie

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

2 years agoREADME: Mention acceptability of pull requests
Ben Gamari [Tue, 31 Jan 2017 02:34:18 +0000 (21:34 -0500)] 
README: Mention acceptability of pull requests

2 years agousers guide: Fix markup of COMPLETE pragma examples
Ben Gamari [Tue, 31 Jan 2017 00:21:54 +0000 (19:21 -0500)] 
users guide: Fix markup of COMPLETE pragma examples

2 years agoMark reallyUnsafePtrEquality# as can_fail
David Feuer [Tue, 31 Jan 2017 23:44:14 +0000 (18:44 -0500)] 
Mark reallyUnsafePtrEquality# as can_fail

As described in the note, floating `reallyUnsafePtrEquality#`
out can make it much less precise. Marking it `can_fail` will
prevent it from floating out, which I believe is particularly
important in light of 5a9a1738023aeb742e537fb4a59c4aa8fecc1f8a,
and should also help prevent let/app invariant failures as seen
in #11444 and #13027.

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

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

GHC Trac Issues: #13027, #11444

2 years agoUse top-level instances to solve superclasses where possible
Daniel Haraj [Tue, 31 Jan 2017 22:28:55 +0000 (22:28 +0000)] 
Use top-level instances to solve superclasses where possible

This patch introduces a new flag `-fsolve-constant-dicts` which makes the
constraint solver solve super class constraints with available dictionaries if
possible. The flag is enabled by `-O1`.

The motivation of this patch is that the compiler can produce more efficient
code if the constraint solver used top-level instance declarations to solve
constraints that are currently solved givens and their superclasses. In
particular, as it currently stands, the compiler imposes a performance penalty
on the common use-case where superclasses are bundled together for user
convenience. The performance penalty applies to constraint synonyms as
well. This example illustrates the issue:

```
{-# LANGUAGE ConstraintKinds, MultiParamTypeClasses, FlexibleContexts #-}
module B where

class M a b where m :: a -> b

type C a b = (Num a, M a b)

f :: C Int b => b -> Int -> Int
f _ x = x + 1
```

Output without the patch, notice that we get the instance for `Num Int` by
using the class selector `p1`.

```
f :: forall b_arz. C Int b_arz => b_arz -> Int -> Int
f =
  \ (@ b_a1EB) ($d(%,%)_a1EC :: C Int b_a1EB) _ (eta1_B1 :: Int) ->
    + @ Int
      (GHC.Classes.$p1(%,%) @ (Num Int) @ (M Int b_a1EB) $d(%,%)_a1EC)
      eta1_B1
      B.f1
```

Output with the patch, nicely optimised code!

```
f :: forall b. C Int b => b -> Int -> Int
f =
  \ (@ b) _ _ (x_azg :: Int) ->
    case x_azg of { GHC.Types.I# x1_a1DP ->
    GHC.Types.I# (GHC.Prim.+# x1_a1DP 1#)
    }
```

Reviewers: simonpj, bgamari, austin

Reviewed By: simonpj

Subscribers: mpickering, rwbarton, thomie

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

GHC Trac Issues: #12791, #5835

2 years agoFix binary instance for SrcStrictness
alexbiehl [Tue, 31 Jan 2017 09:54:50 +0000 (10:54 +0100)] 
Fix binary instance for SrcStrictness

Summary: Found while revisiting the binary serialization for interface files.

Test Plan: Building and validating currently

Reviewers: austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, thomie

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

2 years agoTurn libraries/integer-gmp/gmp/tarball into a submodule
Reid Barton [Mon, 30 Jan 2017 19:18:07 +0000 (14:18 -0500)] 
Turn libraries/integer-gmp/gmp/tarball into a submodule

The submodule repository contains the latest version of the GMP source
distribution (6.1.2) with the doc/ subdirectory removed, as described
in gmp/ghc.mk. Rather than applying the old patch from gmp/tarball/patch
I moved its contents into gmp/gmpsrc.patch, canceling a patch related to
memory management there. Experimentally, the PIC-related patch for OS X
is still necessary.

The upgrade to GMP 6.1.2 fixes #7655.

Test Plan:
Built on OS X with in-tree gmp and tested that the command
`ghc -e 'length (show (2^(5*10^6) :: Integer))'` no longer segfaults.

Reviewers: mpickering, hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

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

GHC Trac Issues: #7655

2 years agoFix minor typo in README.md
Takenobu Tani [Mon, 30 Jan 2017 16:59:58 +0000 (11:59 -0500)] 
Fix minor typo in README.md

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoFix links to building guides in MAKEHELP.md
Takenobu Tani [Mon, 30 Jan 2017 16:59:42 +0000 (11:59 -0500)] 
Fix links to building guides in MAKEHELP.md

MAKEHELP.md has an old link to 'Building/Hacking'.  I updated it to
suitable links for new contributors.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoSimplify minusInteger in integer-gmp slightly
Reid Barton [Mon, 30 Jan 2017 16:59:28 +0000 (11:59 -0500)] 
Simplify minusInteger in integer-gmp slightly

These two special cases were created in D2278 by mechanically
inlining negateInteger into plusInteger. They aren't needed
(the `minusInteger (S# x#) (S# y#)` case already handles all values
correctly), and they can never help by avoiding an allocation,
unlike the original special case in plusInteger, since we still
have to allocate the result.

Removing these special cases will save a couple comparisons and
conditional branches in the common case of subtracting two small
Integers.

Test Plan:
Existing test `plusMinusInteger` already tests
the values in question.

Reviewers: bgamari, goldfire, austin, hvr

Reviewed By: bgamari, hvr

Subscribers: thomie

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

2 years agoPrint COMPLETE pragmas in --show-iface
Matthew Pickering [Mon, 30 Jan 2017 16:59:11 +0000 (11:59 -0500)] 
Print COMPLETE pragmas in --show-iface

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoSlighly clean up symbol loading error.
Tamar Christina [Mon, 30 Jan 2017 16:58:19 +0000 (11:58 -0500)] 
Slighly clean up symbol loading error.

The symbol not found error that is triggered
during lazy-loading was a bit chaotic before.

This reformats it a bit to:

```
ghc-stage2.exe:  | E:\...\libLLVMSupport.a: unknown symbol `_ZN4llvm5APIntC1Ejyb'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm5APInt14AssignSlowCaseERKS0_'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm13ConstantRangeC1ENS_5APIntES1_'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm14FoldingSetImplC2Ej'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZN4llvm15LLVMContextImplD1Ev'
ghc-stage2.exe:  | E:\...\libLLVMLTO.a: unknown symbol `_ZN4llvm11LLVMContextD1Ev'
ghc-stage2.exe:  | E:\...\libLLVMCore.a: unknown symbol `_ZNK4llvm5Value10getContextEv'
ghc-stage2.exe: ^^ Could not load 'LLVMIsMultithreaded', dependency unresolved.
See top entry above.
```

I have also thought about also showing the demangled names, as it may
be useful for the end user.

`libgcc` seems to provide a method for this so we wouldn't need any
extra dependency.

Any thoughts on this or would it not be useful?

Reviewers: austin, erikd, simonmar, bgamari

Reviewed By: bgamari

Subscribers: RyanGlScott, thomie, #ghc_windows_task_force

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

GHC Trac Issues: #13093, #13113

2 years agoFixes bug #11046
Iavor S. Diatchki [Mon, 30 Jan 2017 16:57:35 +0000 (11:57 -0500)] 
Fixes bug #11046

For some time now, type-level operators such as '+' have been treated as
type constructors, rahter than type variables.  This pathc fixes TH's
`lookupName` function to account for this behavior.

Reviewers: bgamari, austin, goldfire, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: Phyx, thomie

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

GHC Trac Issues: #11046

2 years agoAdd a flag to emit error messages as JSON
Matthew Pickering [Mon, 30 Jan 2017 16:53:17 +0000 (11:53 -0500)] 
Add a flag to emit error messages as JSON

This patch adds the flag `-ddump-json` which dumps all the compiler
output as a JSON array. This allows tooling to more easily parse GHC's
output to display to users.

The flag is currently experimental and will hopefully be refined for the
next release.  In particular I have avoided any changes which involve
significant refactoring and provided what is easy given the current
infrastructure.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: DanielG, gracjan, thomie

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

GHC Trac Issues: #13190

2 years agoCheck that a default type signature aligns with the non-default signature
Ryan Scott [Mon, 30 Jan 2017 16:51:22 +0000 (11:51 -0500)] 
Check that a default type signature aligns with the non-default signature

Before, GHC was extremely permissive about the form a default type
signature could take on in a class declaration. Notably, it would accept
garbage like this:

  class Monad m => MonadSupply m where
    fresh :: m Integer
    default fresh :: MonadTrans t => t m Integer
    fresh = lift fresh

And then give an extremely confusing error message when you actually
tried to declare an empty instance of MonadSupply. We now do extra
validity checking of default type signatures to ensure that they align
with their non-default type signature counterparts. That is, a default
type signature is allowed to differ from the non-default one only in its
context - they must otherwise be alpha-equivalent.

Fixes #12918.

Test Plan: ./validate

Reviewers: goldfire, simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, dfeuer, thomie

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

GHC Trac Issues: #12918

2 years agoFix broken tests
Phil Ruffwind [Mon, 30 Jan 2017 16:49:58 +0000 (11:49 -0500)] 
Fix broken tests

1. DoParamM requires the FlexibleContexts pragma now.

2. topHandler02 and topHandler03 were broken as timeout.py failed to
   translate signals to exit codes.

3. topHandler03 does not produce a consistent stderr, as it depends on
   what the user has /bin/sh set to.  dash writes "Terminated" whereas
   bash and zsh produce nothing in non-interactive mode.

4. The remaining tests are broken due to changes in the error message
   formatting.

Test Plan: validate

Reviewers: thomie, dfeuer, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: Phyx, dfeuer

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

2 years agoFix deprecation warnings from containers
Erik de Castro Lopo [Mon, 30 Jan 2017 16:47:00 +0000 (11:47 -0500)] 
Fix deprecation warnings from containers

The functions that were causing warnings were deprecated in containers
0.5 and GHC is already using containers 0.5.9.1.

Test Plan: validate

Reviewers: rwbarton, bgamari, hsyl20, austin, dfeuer

Reviewed By: dfeuer

Subscribers: thomie

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

2 years agoFix mismatched tick in GHC.Generics documentation
Ryan Scott [Mon, 30 Jan 2017 14:31:47 +0000 (09:31 -0500)] 
Fix mismatched tick in GHC.Generics documentation

[ci skip]

A Generic derivation example in the documentation of GHC.Generics put a tick
(used for datatype promotion) in the wrong place.

Fixes #13206.

2 years agoUNREG: add a forward declaration for local literals
Sergei Trofimovich [Sun, 29 Jan 2017 21:11:40 +0000 (21:11 +0000)] 
UNREG: add a forward declaration for local literals

When toplevel literals don't have a way to be exported
from module GHC infers their labels as static.

Example from GHC.Arr:
    static char rdVA_bytes[] = " out of range ";

When this label is used in module internally
we also need to provide it's forward declaration.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
2 years agoUNREG: fix "_bytes" string literal forward declaration
Sergei Trofimovich [Sun, 29 Jan 2017 18:39:48 +0000 (18:39 +0000)] 
UNREG: fix "_bytes" string literal forward declaration

Typical UNREG build failure looks like that:

  ghc-unreg/includes/Stg.h:226:46: error:
     note: in definition of macro 'EI_'
     #define EI_(X)          extern StgWordArray (X) GNU_ATTRIBUTE(aligned (8))
                                                  ^
      |
  226 | #define EI_(X)          extern StgWordArray (X) GNU_ATTRIBUTE(aligned (8))
      |                                              ^

  /tmp/ghc10489_0/ghc_3.hc:1754:6: error:
     note: previous definition of 'ghczmprim_GHCziTypes_zdtcTyCon2_bytes' was here
     char ghczmprim_GHCziTypes_zdtcTyCon2_bytes[] = "TyCon";
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       |
  1754 | char ghczmprim_GHCziTypes_zdtcTyCon2_bytes[] = "TyCon";
       |      ^

As we see here "_bytes" string literals are defined as 'char []'
array, not 'StgWord []'.

The change special-cases "_bytes" string literals to have
correct declaration type.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
2 years agoConvert pprTrace in isPredTy to a WARN
Ryan Scott [Sat, 28 Jan 2017 21:54:11 +0000 (16:54 -0500)] 
Convert pprTrace in isPredTy to a WARN

Summary:
There was a `pprTrace` in `isPredTy` that could fire under certain
scenarios, causing normal GHC users to see debugging output. This turns it into
a less chatty `WARN`, and expounds on the comment below it to add the scenario
in #13187 which triggered the `pprTrace`.

Reviewers: goldfire, austin, bgamari

Reviewed By: goldfire, bgamari

Subscribers: thomie

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

GHC Trac Issues: #13187

2 years agoDocument GHC.Profiling functions [ci skip]
Ömer Sinan Ağacan [Sat, 28 Jan 2017 11:59:30 +0000 (14:59 +0300)] 
Document GHC.Profiling functions [ci skip]

2 years agoAdd delete retry loop. [ci skip]
Tamar Christina [Sat, 28 Jan 2017 04:19:02 +0000 (04:19 +0000)] 
Add delete retry loop. [ci skip]

Summary:
On Windows we have to retry the delete a couple of times.
The reason for this is that a `FileDelete` command just marks a
file for deletion. The file is really only removed when the last
handle to the file is closed. Unfortunately there are a lot of
system services that can have a file temporarily opened using a shared
readonly lock, such as the built in AV and search indexer.

We can't really guarantee that these are all off, so what we can do is
whenever after a `rmtree` the folder still exists to try again and wait a bit.

Based on what I've seen from the tests on CI server, is that this is relatively rare.
So overall we won't be retrying a lot. If after a reasonable amount of time the folder is
still locked then abort the current test by throwing an exception, this so it won't fail
with an even more cryptic error.

The issue is that these services often open a file using `FILE_SHARE_DELETE` permissions.
So they can seemingly be removed, and for most intended purposes they are, but recreating
the file with the same name will fail as the FS will prevent data loss.

The MSDN docs for `DeleteFile` says:

```
The DeleteFile function marks a file for deletion on close.
Therefore, the file deletion does not occur until the last handle
to the file is closed. Subsequent calls to CreateFile to open the
file fail with ERROR_ACCESS_DENIED.
```

Retrying seems to be a common pattern, SQLite has it in their driver
http://www.sqlite.org/src/info/89f1848d7f

The only way to avoid this is to run each way of a test in it's own folder.
This would also have the added bonus of increased parallelism.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, #ghc_windows_task_force

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

GHC Trac Issues: #12661, #13162

2 years agoRemove Data.Tuple doc's claim to have tuple types
Chris Martin [Thu, 26 Jan 2017 23:14:36 +0000 (18:14 -0500)] 
Remove Data.Tuple doc's claim to have tuple types

"The tuple data types" seems like an inaccurate way to lead off the
description of this module, which doesn't actually export the tuple data
types. The latter part of the sentence, "associated functions",
accurately describes the entire module.

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: dfeuer, thomie

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

2 years agoFix the right-shift operation for negative big integers (fixes #12136)
Daishi Nakajima [Thu, 26 Jan 2017 23:14:08 +0000 (18:14 -0500)] 
Fix the right-shift operation for negative big integers (fixes #12136)

In `x shiftR y`, any of the following conditions cause an abort:
- `x` is a negative big integer
- The size of `x` and `y` is a multiple of `GMP_NUMB_BITS`
- The bit of the absolute value of `x` is filled with `1`

For example:
Assuming `GMP_NUMB_BITS = 2`,  the processing of `-15 shiftR 2` is as
follows:

1. -15 = -1111 (twos complement: 10001)
2. right shift 2 (as a positive number) -> 0011
3. Due to the shift larger than GMP_NUMB_BITS, the size of the
destination is decreasing (2bit) -> 11
4. Add 1, and get carry: (1) 00
5. abort

I fixed it that the destination size does not decrease in such a case.

Test Plan: I tested the specific case being reported.

Reviewers: goldfire, austin, hvr, bgamari, rwbarton

Reviewed By: bgamari, rwbarton

Subscribers: mpickering, rwbarton, thomie

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

GHC Trac Issues: #12136

2 years agoFatal if we try to reinitialize the RTS
Simon Marlow [Thu, 26 Jan 2017 23:13:43 +0000 (18:13 -0500)] 
Fatal if we try to reinitialize the RTS

This isn't supported, and fatalling with an error is better than
segfaulting later.

Test Plan: validate

Reviewers: JonCoens, austin, erikd, niteria, bgamari

Reviewed By: niteria, bgamari

Subscribers: thomie

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

2 years agoBump hsc2hs submodule
Ben Gamari [Thu, 26 Jan 2017 23:12:15 +0000 (18:12 -0500)] 
Bump hsc2hs submodule

2 years agoBump nofib submodule
Ben Gamari [Thu, 26 Jan 2017 23:10:43 +0000 (18:10 -0500)] 
Bump nofib submodule

2 years agoGeneralizes the type of asProxyTypeOf (#12805)
Dave Laing [Thu, 26 Jan 2017 17:32:24 +0000 (12:32 -0500)] 
Generalizes the type of asProxyTypeOf (#12805)

Test Plan: validate

Reviewers: austin, hvr, bgamari, RyanGlScott, simonpj

Reviewed By: RyanGlScott, simonpj

Subscribers: simonpj, RyanGlScott, thomie

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

GHC Trac Issues: #12805

2 years agoDon't unnecessarily qualify TH-converted instances with empty contexts
Ryan Scott [Thu, 26 Jan 2017 17:31:59 +0000 (12:31 -0500)] 
Don't unnecessarily qualify TH-converted instances with empty contexts

Summary:
The addition of rigorous pretty-printer tests
(499e43824bda967546ebf95ee33ec1f84a114a7c) had the unfortunate
side-effect of revealing a bug in `hsSyn/Convert.hs` wherein instances are
_always_ qualified with an instance context, even if the context is empty. This
led to instances like this:

```
instance Foo Int
```

being pretty-printed like this!

```
instance () => Foo Int
```

We can prevent this by checking if the context is empty before adding an
HsQualTy to the type.

Also does some refactoring around HsForAllTys in `Convert` while I was in town.

Fixes #13183.

Test Plan: ./validate

Reviewers: goldfire, bgamari, austin, alanz

Reviewed By: alanz

Subscribers: mpickering, thomie

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

GHC Trac Issues: #13183

2 years agoPrune unneeded Derive* language pragmas
Gabor Greif [Thu, 26 Jan 2017 15:46:04 +0000 (16:46 +0100)] 
Prune unneeded Derive* language pragmas

2 years agoMake type import/export API Annotation friendly
Alan Zimmerman [Mon, 23 Jan 2017 18:23:28 +0000 (20:23 +0200)] 
Make type import/export API Annotation friendly

Summary:
At the moment an export of the form

   type C(..)

is parsed by the rule

```
  |  'type' oqtycon           {% amms (mkTypeImpExp (sLL $1 $> (unLoc $2)))
                                     [mj AnnType $1,mj AnnVal $2] }
```

This means that the origiinal oqtycon loses its location which is then retained
in the AnnVal annotation.

The problem is if the oqtycon has its own annotations, these get lost.

e.g. in

  type (?)(..)

the parens annotations for (?) get lost.

This patch adds a wrapper around the name in the IE type to

(a) provide a distinct location for the adornment annotation and

(b) identify the specific adornment, for use in the pretty printer rather than
occName magic.

Updates haddock submodule

Test Plan: ./validate

Reviewers: mpickering, dfeuer, bgamari, austin

Reviewed By: dfeuer

Subscribers: dfeuer, thomie, mpickering

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

GHC Trac Issues: #13163

2 years agoTypos in comments [ci skip]
Gabor Greif [Thu, 26 Jan 2017 10:59:56 +0000 (11:59 +0100)] 
Typos in comments [ci skip]

2 years agoNix typo and redundant where-clauses
Ryan Scott [Thu, 26 Jan 2017 04:51:32 +0000 (23:51 -0500)] 
Nix typo and redundant where-clauses

2 years agoAdd pragCompleteDName to templateHaskellNames
Ryan Scott [Thu, 26 Jan 2017 04:32:17 +0000 (23:32 -0500)] 
Add pragCompleteDName to templateHaskellNames

95dc6dc070deac733d4a4a63a93e606a2e772a67 forgot to add `pragCompleteDName`
to the list of `templateHaskellNames`, which caused a panic if you actually
tried to splice a `COMPLETE` pragma using Template Haskell. This applies the
easy fix and augments the regression test to check for this in the future.

2 years agoGeneralize the type of runRW#
David Feuer [Thu, 26 Jan 2017 02:14:54 +0000 (21:14 -0500)] 
Generalize the type of runRW#

* Generalize the type of `runRW#` to allow arbitrary return types.

* Use `runRW#` to implement `Control.Monad.ST.Lazy.runST` (this
provides evidence that it actually works properly with the generalized
type).

* Adjust the type signature in the definition of `oneShot` to match
the one it is given in `MkId`.

Reviewers: simonmar, austin, bgamari, hvr

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13178

2 years agoTemplate Haskell support for COMPLETE pragmas
Matthew Pickering [Sat, 21 Jan 2017 19:29:49 +0000 (19:29 +0000)] 
Template Haskell support for COMPLETE pragmas

Reviewers: RyanGlScott, austin, goldfire, bgamari

Subscribers: thomie

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

GHC Trac Issues: #13098

2 years agoCOMPLETE pragmas for enhanced pattern exhaustiveness checking
Matthew Pickering [Wed, 18 Jan 2017 13:25:30 +0000 (13:25 +0000)] 
COMPLETE pragmas for enhanced pattern exhaustiveness checking

This patch adds a new pragma so that users can specify `COMPLETE` sets of
`ConLike`s in order to sate the pattern match checker.

A function which matches on all the patterns in a complete grouping
will not cause the exhaustiveness checker to emit warnings.

```
pattern P :: ()
pattern P = ()

{-# COMPLETE P #-}

foo P = ()
```

This example would previously have caused the checker to warn that
all cases were not matched even though matching on `P` is sufficient to
make `foo` covering. With the addition of the pragma, the compiler
will recognise that matching on `P` alone is enough and not emit
any warnings.

Reviewers: goldfire, gkaracha, alanz, austin, bgamari

Reviewed By: alanz

Subscribers: lelf, nomeata, gkaracha, thomie

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

GHC Trac Issues: #8779

2 years agoUpdate Win32 submodule to fix Windows build
Matthew Pickering [Wed, 25 Jan 2017 14:53:55 +0000 (14:53 +0000)] 
Update Win32 submodule to fix Windows build

Reviewers: RyanGlScott, austin, Phyx, bgamari

Subscribers: thomie

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

2 years agoAdd myself [ci skip]
Gabor Greif [Wed, 25 Jan 2017 11:19:49 +0000 (12:19 +0100)] 
Add myself [ci skip]

2 years agoTypos in comments [ci skip]
Gabor Greif [Tue, 24 Jan 2017 13:54:31 +0000 (14:54 +0100)] 
Typos in comments [ci skip]

2 years agoUpdate .mailmap
Matthew Pickering [Wed, 25 Jan 2017 10:30:13 +0000 (10:30 +0000)] 
Update .mailmap

2 years agotestsuite: Bump compiler allocations of T5837
Ben Gamari [Tue, 24 Jan 2017 21:48:18 +0000 (16:48 -0500)] 
testsuite: Bump compiler allocations of T5837

Gipeda suggests that this is due to the recent top-level string literals in Core
patch.

2 years agoBump Win32 version.
Ben Gamari [Mon, 23 Jan 2017 19:52:36 +0000 (14:52 -0500)] 
Bump Win32 version.

Bump the version of `Win32` to `2.5.0.0` which is a major update and includes
fixes for wrong alignments and wrong 64-bit types. Strangely enough this also
seems to resolve #12713, where `T10858` was failing due to too-low allocations.

The underlying type aliases have changed, so there is a potential
for user programs not to compile anymore, but the types were incorrect.

This also requires a bump in the `directory`, `Cabal`, and `process`
submodules.

Original author: Tamar Christina <tamar@zhox.com>

Test Plan: ./validate

Reviewers: bgamari, RyanGlScott, austin

Subscribers: hvr, RyanGlScott, thomie, #ghc_windows_task_force

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

2 years agoHscTypes: Use foldl' instead of foldr
Ben Gamari [Tue, 24 Jan 2017 17:52:06 +0000 (12:52 -0500)] 
HscTypes: Use foldl' instead of foldr

In this case we are building a map, for which `foldl'` is much better
suited. This has a small but consistent impact on compiler allocations,
```
        -1 s.d.                -----          -0.161%
        +1 s.d.                -----          -0.011%
        Average                -----          -0.086%
```

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

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

2 years agonativeGen: Use `foldl'` instead of `foldr` in free register accumulation
Ben Gamari [Tue, 24 Jan 2017 17:51:26 +0000 (12:51 -0500)] 
nativeGen: Use `foldl'` instead of `foldr` in free register accumulation

Manipulations of `FreeRegs` values are all just bit-operations on a
word. Turning these `foldr`s into `foldl'`s has a very small but consistent
effect on compiler allocations,
```
        -1 s.d.                -----          -0.065%
        +1 s.d.                -----          -0.018%
        Average                -----          -0.042%
```

Test Plan: Validate

Reviewers: austin

Subscribers: thomie

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

2 years agoUniqSet: Implement unionManyUniqSets in terms of foldl' instead of foldr
Ben Gamari [Tue, 24 Jan 2017 17:50:00 +0000 (12:50 -0500)] 
UniqSet: Implement unionManyUniqSets in terms of foldl' instead of foldr

foldr generally isn't a good choice for folds where the result can't be
consumed incrementally. This gives a very modest improvement in
compiler allocations,
```
        -1 s.d.                -----          -0.182%
        +1 s.d.                -----          -0.050%
        Average                -----          -0.116%
```
This is clearly semantics-preserving since we are constructing a set.

Test Plan: Validate

Reviewers: austin

Subscribers: dfeuer, thomie

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

2 years agoPartially revert D3001
David Feuer [Tue, 24 Jan 2017 20:59:39 +0000 (15:59 -0500)] 
Partially revert D3001

D3001 accidentally changed the meaning of `containsSpan`. Revert
that change.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoDon't put foralls in front of TH-spliced GADT constructors that don't need them
Ryan Scott [Tue, 24 Jan 2017 15:16:38 +0000 (10:16 -0500)] 
Don't put foralls in front of TH-spliced GADT constructors that don't need them

Summary:
It turns out that D2974 broke this program
(see https://phabricator.haskell.org/rGHC729a5e452db5#58801):

```lang=haskell
{-# LANGUAGE ConstraintKinds #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -ddump-splices #-}
module Bug where

import GHC.Exts (Constraint)

$([d| data Dec13 :: (* -> Constraint) -> * where
        MkDec13 :: c a => a -> Dec13 c
    |])
```

This was actually due to a long-standing bug in `hsSyn/Convert` that put
unnecessary `forall`s in front of GADT constructors that didn't have any
explicitly quantified type variables.

This cargo-cults the code in `Convert` that handles `ForallT` and adapts
it to `ForallC`. Fixes #13123 (for real this time).

Test Plan: make test TEST=T13123

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13123

2 years agoSkip path_with_commas when dyn unavailable
Bartosz Nitka [Tue, 24 Jan 2017 14:45:54 +0000 (06:45 -0800)] 
Skip path_with_commas when dyn unavailable

RyanGlScott reported a failure:
```
Could not find module 'Prelude'; Perhaps you haven't
installed the "dyn" libraries for package ‘base-4.10.0.0’?
```
This might fix it.

Test Plan: harbormaster

Reviewers: austin, bgamari, thomie, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: thomie, simonmar

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

2 years agoRemove unused LOCAL_GHC_PKG definition from a test Makefile
Reid Barton [Tue, 24 Jan 2017 03:00:11 +0000 (22:00 -0500)] 
Remove unused LOCAL_GHC_PKG definition from a test Makefile

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd a failing test for #13102
Reid Barton [Tue, 24 Jan 2017 02:59:39 +0000 (21:59 -0500)] 
Add a failing test for #13102

Test Plan: harbormaster

Reviewers: austin, ezyang, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13102

2 years agoDocument -fspecialise-aggressively
Matthew Pickering [Tue, 24 Jan 2017 02:58:45 +0000 (21:58 -0500)] 
Document -fspecialise-aggressively

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #12979

2 years agoRe-sort case alternatives after scrutinee constant folding (#13170)
Reid Barton [Tue, 24 Jan 2017 02:57:53 +0000 (21:57 -0500)] 
Re-sort case alternatives after scrutinee constant folding (#13170)

Commit d3b546b1a605 added a "scrutinee constant folding" pass
that rewrites a case expression whose scrutinee is an expression like
x +# 3#. But case expressions are supposed to have their alternatives in
sorted order, so when the scrutinee is (for example) negateInt# x#, we
need to re-sort the alternatives after mapping their values.

This showed up as a core lint failure when compiling System.Process.Posix:

    isSigIntQuit n = sig == sigINT || sig == sigQUIT
        where sig = fromIntegral (-n)

Data.List.sortBy is supposed to be linear-time on sorted or reverse-sorted
input, so it is probably not worth doing anything more clever than this.

Test Plan: Added a new test T13170 for the above case.

Reviewers: austin, hsyl20, simonpj, bgamari

Reviewed By: hsyl20, simonpj, bgamari

Subscribers: thomie

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

GHC Trac Issues: #13170

2 years agoEnsure that scrutinee constant folding wraps numbers
Sylvain Henry [Tue, 24 Jan 2017 02:57:38 +0000 (21:57 -0500)] 
Ensure that scrutinee constant folding wraps numbers

Test Plan: T13172

Reviewers: rwbarton, simonpj, austin, bgamari

Reviewed By: simonpj, bgamari

Subscribers: simonpj, thomie

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

GHC Trac Issues: #13172

2 years agousers-guide: Document -dppr-ticks
Ben Gamari [Mon, 23 Jan 2017 21:17:41 +0000 (16:17 -0500)] 
users-guide: Document -dppr-ticks

2 years agotypecheck: Fix note
Ben Gamari [Tue, 24 Jan 2017 02:52:46 +0000 (21:52 -0500)] 
typecheck: Fix note

2 years agoMake tickishContains faster
Bartosz Nitka [Mon, 23 Jan 2017 14:51:31 +0000 (09:51 -0500)] 
Make tickishContains faster

This just reorders some inequality checks to make the common case
cheaper.

The results are quite dramatic for #11095, but that's probably because
something else is causing it to do too much work.

Before (full https://phabricator.haskell.org/P136):
```
  13,589,495,832 bytes allocated in the heap
```

After (full https://phabricator.haskell.org/P137):
```
   7,885,575,872 bytes allocated in the heap
```

This is with `BuildFlavour = devel2`, so take it with a
a grain of salt.

For reference, with no `-g` I get:
```
155,703,112 bytes allocated in the heap
```
so we're still quite a way off.

Test Plan:
harbormaster
I still have to test locally

Reviewers: austin, bgamari

Subscribers: thomie, simonmar

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

GHC Trac Issues: #11095

2 years agoRecord evaluated-ness on workers and wrappers
Simon Peyton Jones [Fri, 13 Jan 2017 08:56:53 +0000 (08:56 +0000)] 
Record evaluated-ness on workers and wrappers

Summary:
This patch is a refinement of the original commit (which
was reverted):

  commit 6b976eb89fe72827f226506d16d3721ba4e28bab
  Date:   Fri Jan 13 08:56:53 2017 +0000
      Record evaluated-ness on workers and wrappers

In Trac #13027, comment:20, I noticed that wrappers created after
demand analysis weren't recording the evaluated-ness of strict
constructor arguments.  In the ticket that led to a (debatable)
Lint error but in general the more we know about evaluated-ness
the better we can optimise.

This commit adds that info
  * both in the worker (on args)
  * and in the wrapper (on CPR result patterns).
See Note [Record evaluated-ness in worker/wrapper] in WwLib

On the way I defined Id.setCaseBndrEvald, and used it to shorten
the code in a few other places

Then I added test T13077a to test the CPR aspect of this patch,
but I found that Lint failed!

Reason: simpleOptExpr was discarding evaluated-ness info on
lambda binders because zapFragileIdInfo was discarding an
Unfolding of (OtherCon _).  But actually that's a robust
unfolding; there is no need to discard it. To fix this:

* zapFragileIdInfo only zaps fragile unfoldings

* Replace isClosedUnfolding with isFragileUnfolding (the latter
  is just the negation of the former, but the nomenclature is
  more consistent).  Better documentation too
       Note [Fragile unfoldings]

* And Simplify.simplLamBndr can now look at isFragileUnfolding
  to decide whether to use the longer route of simplUnfolding.

For some reason perf/compiler/T9233 improves in compile-time
allocation by 10%.  Hooray

Nofib: essentially no change:

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
      cacheprof          +0.0%     -0.3%     +0.9%     +0.4%     +0.0%
--------------------------------------------------------------------------------
            Min          +0.0%     -0.3%     -2.4%     -2.4%     +0.0%
            Max          +0.0%     +0.0%     +9.8%    +11.4%     +2.4%
 Geometric Mean          +0.0%     -0.0%     +1.1%     +1.0%     +0.0%

2 years agoDon't quantify implicit type variables when quoting type signatures in TH
Ryan Scott [Mon, 23 Jan 2017 14:06:04 +0000 (09:06 -0500)] 
Don't quantify implicit type variables when quoting type signatures in TH

Summary:
A bug was introduced in GHC 8.0 in which Template Haskell-quoted type
signatures would quantify _all_ their type variables, even the implicit ones.
This would cause splices like this:

```
$([d| idProxy :: forall proxy (a :: k). proxy a -> proxy a
      idProxy x = x
   |])
```

To splice back in something that was slightly different:

```
idProxy :: forall k proxy (a :: k). proxy a -> proxy a
idProxy x = x
```

Notice that the kind variable `k` is now explicitly quantified! What's worse,
this now requires the `TypeInType` extension to be enabled.

This changes the behavior of Template Haskell quoting to never explicitly
quantify type variables which are implicitly quantified in the source.

There are some other places where this behavior pops up too, including
class methods, type ascriptions, `SPECIALIZE` pragmas, foreign imports,
and pattern synonynms (#13018), so I fixed those too.

Fixes #13018 and #13123.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: simonpj, goldfire

Subscribers: simonpj, mpickering, thomie

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

GHC Trac Issues: #13018, #13123

2 years agoMake checkFamInstConsistency faster
Bartosz Nitka [Mon, 23 Jan 2017 12:56:21 +0000 (04:56 -0800)] 
Make checkFamInstConsistency faster

We've noticed that `checkFamInstConsistency` takes 6% of
overall build time on our codebase.
I've poked around for a bit and most of type family
instances are `Rep` from `Generics`. I think those are
unavoidable, so I don't think we can have less of them.

I also looked at the code and noticed a simple algorithmic
improvement can be made. The algorithm is pretty simple:
we take all the family instances from one module (`M1`)
and test it against another module (`M2`).
The cost of that is dominated by the size of `M1`, because
for each instance in `M1` we look it up in the type family
env from `M2`, and lookup is cheap.
If `M1` is bigger than `M2`, that's suboptimal, so after
my change we always iterate through the smaller set.

This drives down the cost of `checkFamInstConsistency`
to 2%.

Test Plan: harbormaster

Reviewers: simonmar, simonpj, goldfire, rwbarton, bgamari, ezyang, austin

Reviewed By: rwbarton, ezyang

Subscribers: ezyang, thomie

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

2 years agoTypos and grammar in manual/comments
Gabor Greif [Mon, 23 Jan 2017 08:38:15 +0000 (09:38 +0100)] 
Typos and grammar in manual/comments

2 years agoApply the right substitution in ty-fam improvement
Simon Peyton Jones [Fri, 20 Jan 2017 23:47:28 +0000 (23:47 +0000)] 
Apply the right substitution in ty-fam improvement

Trac #13135 showed that we were failing to apply the
correct substitution to the un-substituted tyvars during
type-family improvement using injectivity.  Specifically
in TcInteractlinjImproveEqns we need to use instFlexiX.

An outright bug, easy to fix.

Slight refactoring along the way.  The quantified tyars of the axiom are
readily to hand; we don't need to take the free tyvars of the LHS

2 years agoImprove pretty-printing of IfaceCoercions
Simon Peyton Jones [Fri, 20 Jan 2017 23:37:21 +0000 (23:37 +0000)] 
Improve pretty-printing of IfaceCoercions

For some reason, unless you have -fprint-explicit-coercions, when
printing an explicit coercion we were then going to special trouble to
suppress the unique of a hole (which only happens during debugging
anyway).  This is bizarre.

So I deleted three lines of code -- hooray.

2 years agoFailing test for #13149.
Edward Z. Yang [Sun, 22 Jan 2017 20:11:05 +0000 (12:11 -0800)] 
Failing test for #13149.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoRewrite Backpack comments on never-exported TyThings.
Edward Z. Yang [Thu, 19 Jan 2017 06:54:35 +0000 (22:54 -0800)] 
Rewrite Backpack comments on never-exported TyThings.

Summary:
While thesing, I realized this part of the implementation
didn't make very much sense, so I started working on some
documentation updates to try to make things more explainable.

The new docs are organized around the idea of a
"never exported TyThing" (a non-implicit TyThing that never
occurs in the export list of a module).  I also removed
some outdated information that predated the change of
ModIface to store Names rather than OccNames.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Reviewers: simonpj, bgamari, austin

Subscribers: thomie

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

2 years agoPreserve coercion axioms when thinning.
Edward Z. Yang [Thu, 19 Jan 2017 00:17:04 +0000 (16:17 -0800)] 
Preserve coercion axioms when thinning.

Forgot to handle these!  In they go, plus a test case.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoRemove clean_cmd and extra_clean usage from .T files
Thomas Miedema [Sun, 22 Jan 2017 18:24:13 +0000 (13:24 -0500)] 
Remove clean_cmd and extra_clean usage from .T files

The `clean_cmd` and `extra_clean` setup functions don't do anything.
Remove them from .T files.

Created using https://github.com/thomie/refactor-ghc-testsuite. This
diff is a test for the .T-file parser/processor/pretty-printer in that
repository.

    find . -name '*.T' -exec ~/refactor-ghc-testsuite/Main "{}" \;

Tests containing inline comments or multiline strings are not modified.

Preparation for #12223.

Test Plan: Harbormaster

Reviewers: austin, hvr, simonmar, mpickering, bgamari

Reviewed By: mpickering

Subscribers: mpickering

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

GHC Trac Issues: #12223

2 years agotestsuite: Bump allocations on T5321Fun and T12707
Ben Gamari [Sun, 22 Jan 2017 18:21:47 +0000 (13:21 -0500)] 
testsuite: Bump allocations on T5321Fun and T12707

These are only failing on Darwin, strangely enough, but do so quite
reproducibly.

2 years agoconfigure.ac: Eliminate stray close bracket
Ben Gamari [Sat, 21 Jan 2017 21:57:14 +0000 (16:57 -0500)] 
configure.ac: Eliminate stray close bracket

2 years agoRevert "Remove unnecessary isTyVar tests in TcType"
Ryan Scott [Sun, 22 Jan 2017 17:57:08 +0000 (12:57 -0500)] 
Revert "Remove unnecessary isTyVar tests in TcType"

Summary:
This reverts commit a0899b2f66a4102a7cf21569889381446ce63833. This is because
removing these checks prompts panics in at least two different programs
reported in #12785.

Test Plan: ./validate

Reviewers: simonpj, goldfire, bgamari, austin

Subscribers: thomie

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

GHC Trac Issues: #12785

2 years agoAlways use -Xlinker for -rpath
Bartosz Nitka [Sat, 21 Jan 2017 17:59:55 +0000 (09:59 -0800)] 
Always use -Xlinker for -rpath

Currently we use `-Wl` which takes a list of
comma-separated options. Unfortunately that
breaks when you use it with `-rpath` and
a path that has commas in them.
Buck, the build system, produces paths with
commas in them.

`-Xlinker` doesn't have this disadvantage
and as far as I can tell is supported by
both `gcc` and `clang`. Anecdotally `nvcc`
supports `-Xlinker`, but not `-Wl`.

Test Plan: ./validate, harbourmaster

Reviewers: nomeata, simonmar, austin, bgamari, hvr

Reviewed By: simonmar, bgamari

Subscribers: thomie

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

2 years agoWarn on missing home modules
Yuras Shumovich [Fri, 20 Jan 2017 21:53:45 +0000 (16:53 -0500)] 
Warn on missing home modules

Introduce a warning, -Wmissing-home-modules, to warn about home modules,
not listed in command line.

It is usefull for cabal when user fails to list a module in
`exposed-modules` and `other-modules`.

Test Plan: make TEST=MissingMod

Reviewers: mpickering, austin, bgamari

Reviewed By: bgamari

Subscribers: simonpj, mpickering, thomie

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

GHC Trac Issues: #13129

2 years agoClean up some shell code and M4 quoting
Demi Obenour [Fri, 20 Jan 2017 21:49:53 +0000 (16:49 -0500)] 
Clean up some shell code and M4 quoting

Test Plan: GHC CI

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, erikd

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

2 years agotestsuite: Don't fail if "target has RTS linker" field is missing
Reid Barton [Fri, 20 Jan 2017 21:49:37 +0000 (16:49 -0500)] 
testsuite: Don't fail if "target has RTS linker" field is missing

Test Plan: harbormaster

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

2 years agoAdd a failing test for #13099
Reid Barton [Fri, 20 Jan 2017 20:03:44 +0000 (15:03 -0500)] 
Add a failing test for #13099

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #13099

2 years agoShow explicit quantifiers in conflicting definitions error
Phil de Joux [Fri, 20 Jan 2017 19:59:44 +0000 (14:59 -0500)] 
Show explicit quantifiers in conflicting definitions error

This fixes #12441, where definitions in a Haskell module and its boot
file which differed only in their quantifiers produced a confusing error
message. Here we teach GHC to always show quantifiers for these errors.

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

Reviewed By: bgamari

Subscribers: snowleopard, simonpj, mpickering, thomie

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

GHC Trac Issues: #12441