4 years agousers_guide: Add note about #367 to Bugs section
Ben Gamari [Wed, 5 Aug 2015 12:21:28 +0000 (14:21 +0200)] 
users_guide: Add note about #367 to Bugs section

This is a long-standing bug and should be mentioned in the users guide,
as noted in #10639.

Test Plan: Carefully check language.

Reviewers: simonpj, rwbarton, austin

Subscribers: rwbarton, thomie

Differential Revision:

GHC Trac Issues: #10639, #367

4 years agoAdd framework flags when linking a dynamic library
Christiaan Baaij [Wed, 5 Aug 2015 12:20:56 +0000 (14:20 +0200)] 
Add framework flags when linking a dynamic library

This fixes the GHC side of trac #10568. So `cabal install
--ghc-options="-framework GLUT" GLUT` creates a correctly linked
GLUT.dylib. We still need to explictly pass `--ghc-options="-framework
GLUT"` because the Cabal side #10568 is not fixed.

Update: the Cabal side of #10568 is fixed by

Test Plan: validate

Reviewers: austin, rwbarton, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision:

GHC Trac Issues: #10568

4 years agoPretty: use replicate for spaces and multi_ch (#10735)
Thomas Miedema [Tue, 4 Aug 2015 16:32:09 +0000 (18:32 +0200)] 
Pretty: use replicate for spaces and multi_ch (#10735)

Similar changes were made to pretty in commit

4 years agoPretty: mimic pretty API more closely (#10735)
Thomas Miedema [Tue, 4 Aug 2015 14:20:08 +0000 (16:20 +0200)] 
Pretty: mimic pretty API more closely (#10735)

Refactoring only. Nothing much to see here.

4 years agoPretty: use BangPatterns instead of manual unboxing Ints (#10735)
Thomas Miedema [Mon, 3 Aug 2015 18:16:58 +0000 (20:16 +0200)] 
Pretty: use BangPatterns instead of manual unboxing Ints (#10735)

Follow same style as libraries/pretty, although some of it is pretty
archaic, and could be improved with BangPatterns:
   * `get w _ | w == 0 && False = undefined`
   * `mkNest k _ | k `seq` False = undefined`

4 years agoPretty: Args of NilAbove/TextBeside/Nest/Union are always RDocs (#10735)
Thomas Miedema [Mon, 3 Aug 2015 17:34:36 +0000 (19:34 +0200)] 
Pretty: Args of NilAbove/TextBeside/Nest/Union are always RDocs (#10735)

Just following libraries/pretty.

4 years agoPretty: kill code that has been dead since 1997 (#10735)
Thomas Miedema [Mon, 3 Aug 2015 17:23:21 +0000 (19:23 +0200)] 
Pretty: kill code that has been dead since 1997 (#10735)

4 years agoPretty: remove superfluous parenthesis (#10735)
Thomas Miedema [Mon, 3 Aug 2015 16:57:06 +0000 (18:57 +0200)] 
Pretty: remove superfluous parenthesis (#10735)

4 years agoPretty: improve error messages (#10735)
Thomas Miedema [Mon, 3 Aug 2015 16:27:07 +0000 (18:27 +0200)] 
Pretty: improve error messages (#10735)

Again, following libraries/pretty.

4 years agoPretty: rename variables to the ones used by libraries/pretty (#10735)
Thomas Miedema [Mon, 3 Aug 2015 16:05:28 +0000 (18:05 +0200)] 
Pretty: rename variables to the ones used by libraries/pretty (#10735)

4 years agoPretty: reformat using style from libraries/pretty (#10735)
Thomas Miedema [Mon, 3 Aug 2015 14:36:42 +0000 (16:36 +0200)] 
Pretty: reformat using style from libraries/pretty (#10735)

This commit copies the code structure (what goes where), whitespace layout
and comments from libraries/pretty/src/Text/PrettyPrint/HughesPJ.hs,
with the intention to be able to later more easily compare the two
files, and port bug fixes.

I'm sorry this messes up git blame history, but there's no other way.

4 years agoTest #9233 in perf/compiler/T9233
Richard Eisenberg [Mon, 3 Aug 2015 15:11:04 +0000 (11:11 -0400)] 
Test #9233 in perf/compiler/T9233

Ideally, we could use Phab's numbers to set the perf
test correctly. But even if that's not possible, then I need help
writing my `all.T`. With the version you see here, I get the following

Traceback (most recent call last):
  File "/Users/rae/Documents/ghc-valid/testsuite/driver/", line 801, in do_test
    result = func(*[name,way] + args)
TypeError: multimod_compile() takes exactly 4 arguments (6 given)

I don't know how to fix this.

Test Plan: validate

Reviewers: austin, bgamari, thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9233

4 years agoFix #10713.
Richard Eisenberg [Mon, 3 Aug 2015 12:53:03 +0000 (08:53 -0400)] 
Fix #10713.

When doing the apartness/flattening thing, we really only need to
eliminate non-generative tycons, not *all* families. (Data families
are indeed generative!)

4 years agoRemoved deprecated syntax for GADT constuctors.
Ulya Trofimovich [Mon, 3 Aug 2015 15:45:56 +0000 (17:45 +0200)] 
Removed deprecated syntax for GADT constuctors.

Old syntax was deprecated 6 years ago in this commit
432b9c9322181a3644083e3c19b7e240d90659e7 by simonpj:"New syntax for
GADT-style record declarations, and associated refactoring" discussed
in Trac #3306.

This patch removes 2 reduce/reduce conflicts in parser. Conflicting
productions were:

    gadt_constr -> con_list '::' sigtype
    gadt_constr -> oqtycon '{' fielddecls '}' '::' sigtype

Recursive inlining of `con_list` and `oqtycon` helped reveal the

    gadt_constr -> '(' CONSYM ')' '::' sigtype
    gadt_constr -> '(' CONSYM ')' '{' fielddecls '}' '::' sigtype

between two types of GADT constructors (second form stands for
deprecated syntax).

Test Plan: `make fasttest`, one breakage TEST="records-fail" (parse
error instead of typecheck error due to removal of deprecated syntax).
Updated test.

Reviewers: simonmar, bgamari, austin, simonpj

Reviewed By: simonpj

Subscribers: thomie, mpickering, trofi

Differential Revision:

GHC Trac Issues: #3306

4 years agoCmmParse: Don't force alignment in memcpy-ish operations
Ben Gamari [Mon, 3 Aug 2015 13:31:03 +0000 (15:31 +0200)] 
CmmParse: Don't force alignment in memcpy-ish operations

This was initially made in 681973c31c614185229bdae4f6b7ab4f6e64753d.
Here I wanted to enforce that the alignment passed to %memcpy was a
constant expression, as this is required by LLVM. However, this breaks
the knot-tying done in `loopDecls`, causing T8131 to hang.

Here I remove the `seq` and mark T8131 as `expect_broken` in the case
of the NCG, which doesn't force the alignment in this case.

Fixes #10664.

4 years agoTypos in comments [skip ci]
Gabor Greif [Mon, 3 Aug 2015 11:38:48 +0000 (13:38 +0200)] 
Typos in comments [skip ci]

4 years agoSupport wild cards in data/type family instances
Thomas Winant [Mon, 3 Aug 2015 12:57:40 +0000 (14:57 +0200)] 
Support wild cards in data/type family instances

Handle anonymous wild cards in type or data family instance
declarations like
unnamed type variables. For instance (pun intented):

    type family F (a :: *) (b :: *) :: *
    type instance F Int _ = Int

Is now the same as:

    type family F (a :: *) (b :: *) :: *
    type instance F Int x = Int

Note that unlike wild cards in partial type signatures, no errors (or
with -XPartialTypeSignatures) are generated for these wild cards, as
there is
nothing interesting to report to the user, i.e. the inferred kind.

Only anonymous wild cards are supported here, named and
extra-constraints wild
card are not.

Test Plan: pass new tests

Reviewers: goldfire, austin, simonpj, bgamari

Reviewed By: simonpj, bgamari

Subscribers: goldfire, thomie

Differential Revision:

GHC Trac Issues: #3699, #10586

4 years ago4 reduce/reduce parser conflicts resolved
Ulya Trofimovich [Mon, 3 Aug 2015 12:56:16 +0000 (14:56 +0200)] 
4 reduce/reduce parser conflicts resolved

As GHC documentation (section 7.4.4, Type operators) says:
> "There is now some potential ambiguity in import and export lists;
for example if you write import M( (+) ) do you mean the function (+)
or the type constructor (+)? The default is the former, but with
-XExplicitNamespaces (which is implied by -XExplicitTypeOperators) GHC
allows you to specify the latter by preceding it with the keyword type"

Turns out this ambiguity causes 4 of 6 reduce/reduce conflicts in GHC
parser.  All 4 conflicts arise from a single production:

        :  qvar
        |  oqtycon

Recursive inlining of 'qvar' and 'oqtycon' helps reveal the faulty

        | '(' QVARSYM ')'
        | '(' VARSYM ')'
        | '(' '*'    ')'
        | '(' '-'    ')'

These productions can either be parsed as variable or type constructor,
but variable constuctor is always preferred. My patch removes ambiguity
while preserving the existing behaviour:

  - all unambigous productions are left as-is
  - ambigous productions for variable constuctors are left
  - ambigous productions for type constructors are removed (there's no
    way they could be triggered)

Updated comment.

Test Plan: Tested with 'make fasttest'

Reviewers: austin, simonpj, trofi, bgamari, simonmar

Reviewed By: trofi, bgamari, simonmar

Subscribers: thomie, mpickering

Projects: #ghc

Differential Revision:

4 years agoTest Trac #10134
Simon Peyton Jones [Mon, 3 Aug 2015 12:39:56 +0000 (13:39 +0100)] 
Test Trac #10134

4 years agoMinor improvement to user guide
Simon Peyton Jones [Mon, 3 Aug 2015 10:07:08 +0000 (11:07 +0100)] 
Minor improvement to user guide

Specify that the type variables for a class/instance decl scope
over the body even without a 'forall'.

Provoked by Trac #10722.

4 years agoTypos in comments
Simon Peyton Jones [Mon, 3 Aug 2015 10:04:22 +0000 (11:04 +0100)] 
Typos in comments

4 years agoFix incorrect stack pointer usage in StgRun() on x86_64
Ben Gamari [Mon, 3 Aug 2015 06:42:00 +0000 (08:42 +0200)] 
Fix incorrect stack pointer usage in StgRun() on x86_64

The STG_RETURN code from StgCRun.c is incorrect for x86_64 variants
where the ABI doesn't impose a mandatory red zone for the stack, like on
Windows or Xen/HaLVM. The current implementation restores the stack
pointer first, which effectively marks the area with the saved registers
as reusable. Later, the CPU registers are restored from this "free"

This ordering happens to work by accident on operating systems that
strictly adhere to the System V ABI, because any interrupt/signal
delivery is guaranteed to leave the first 128 bytes past the stack
pointer untouched (red zone). On other systems this might result in
corrupted CPU registers if an interruption happens just after restoring
the stack pointer.

The red zone is usually only used by small leaf functions to avoid
updates to the stack pointer and exploiting it doesn't give us any
advantage in this case.

Reviewers: austin, rwbarton

Reviewed By: rwbarton

Subscribers: thomie, simonmar

Differential Revision:

GHC Trac Issues: #10155

4 years agoUpdate parallel submodule, and re-enable warnings
Simon Marlow [Mon, 3 Aug 2015 06:41:45 +0000 (08:41 +0200)] 
Update parallel submodule, and re-enable warnings

Test Plan: using remote validate

Reviewers: austin, hvr, simonpj, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agoSupport MO_U_QuotRem2 in LLVM backend
Michal Terepeta [Mon, 3 Aug 2015 06:41:13 +0000 (08:41 +0200)] 
Support MO_U_QuotRem2 in LLVM backend

This adds support for MO_U_QuotRem2 in LLVM backend.  Similarly to
MO_U_Mul2 we use the standard LLVM instructions (in this case 'udiv'
and 'urem') but do the computation on double the word width (e.g., for
64-bit we will do them on 128 registers).

Test Plan: validate

Reviewers: rwbarton, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #9430

4 years agoMake BranchFlag a new kind
Gabor Greif [Sat, 1 Aug 2015 08:52:39 +0000 (10:52 +0200)] 
Make BranchFlag a new kind

this is resolving an old TODO comment

4 years agoTypo in comment
Gabor Greif [Sun, 2 Aug 2015 17:26:04 +0000 (19:26 +0200)] 
Typo in comment

4 years agoReplace (SourceText,FastString) with StringLiteral data type
Alan Zimmerman [Sun, 2 Aug 2015 08:26:59 +0000 (10:26 +0200)] 
Replace (SourceText,FastString) with StringLiteral data type

Phab:D907 introduced SourceText for a number of data types, by replacing
FastString with (SourceText,FastString). Since this has an Outputable
instance, no warnings are generated when ppr is called on it, but
unexpected output is generated. See Phab:D1096 for an example of this.

Replace the (SourceText,FastString) tuples with a new data type,
data StringLiteral = StringLiteral SourceText FastString

Update haddock submodule accordingly

Test Plan: ./validate

Reviewers: hvr, austin, rwbarton, trofi, bgamari

Reviewed By: trofi, bgamari

Subscribers: thomie, trofi, rwbarton, mpickering

Differential Revision:

GHC Trac Issues: #10692

4 years agoTypos in comments
Gabor Greif [Sat, 1 Aug 2015 15:31:42 +0000 (17:31 +0200)] 
Typos in comments

4 years agoGive raise# a return type of open kind (#10481)
Reid Barton [Fri, 31 Jul 2015 21:09:45 +0000 (17:09 -0400)] 
Give raise# a return type of open kind (#10481)

Test Plan: validate

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #10481

4 years agoTypos in comments
Gabor Greif [Thu, 30 Jul 2015 22:37:34 +0000 (00:37 +0200)] 
Typos in comments

4 years agoRemove checked-in PDFs.
Edward Z. Yang [Fri, 31 Jul 2015 18:56:43 +0000 (11:56 -0700)] 
Remove checked-in PDFs.

Signed-off-by: Edward Z. Yang <>
4 years agoFix #7919 (again)
Simon Marlow [Thu, 30 Jul 2015 14:34:43 +0000 (07:34 -0700)] 
Fix #7919 (again)

The fix is a bit clunky, and is perhaps not the best fix, but I'm not
sure how much work it would be to fix it the other way (see comments
for more info).

Test Plan: T7919 doesn't crash

Reviewers: austin, rwbarton, ezyang, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #7919

4 years agoUser's guide: delete ancient "Core syntax" example
Thomas Miedema [Fri, 31 Jul 2015 15:15:10 +0000 (17:15 +0200)] 
User's guide: delete ancient "Core syntax" example

4 years agoBuild system: remove function keyword from (#10705)
Thomas Miedema [Fri, 31 Jul 2015 10:45:44 +0000 (12:45 +0200)] 
Build system: remove function keyword from (#10705)

This fixes the FreeBSD build.

4 years agoBackpack docs on renamer and depsolver, also s/package/unit/.
Edward Z. Yang [Fri, 31 Jul 2015 06:43:52 +0000 (23:43 -0700)] 
Backpack docs on renamer and depsolver, also s/package/unit/.

Signed-off-by: Edward Z. Yang <>
4 years agoTestsuite: T10245 is passing for WAY=ghci (#10245)
Thomas Miedema [Thu, 30 Jul 2015 23:08:09 +0000 (01:08 +0200)] 
Testsuite: T10245 is passing for WAY=ghci (#10245)

Needed to get closer to passing `validate --slow`.

4 years agoTestsuite: add typecheck/should_fail/T8034 (#8034)
Thomas Miedema [Mon, 27 Jul 2015 22:15:51 +0000 (00:15 +0200)] 
Testsuite: add typecheck/should_fail/T8034 (#8034)

4 years agoTestsuite: add typecheck/should_fail/T9260 (#9260)
Thomas Miedema [Mon, 27 Jul 2015 20:07:00 +0000 (22:07 +0200)] 
Testsuite: add typecheck/should_fail/T9260 (#9260)

4 years agoTestsuite: add arrows/should_compile/T5333 (#5333)
Thomas Miedema [Mon, 27 Jul 2015 19:46:26 +0000 (21:46 +0200)] 
Testsuite: add arrows/should_compile/T5333 (#5333)

4 years agoTestsuite: skip T10489 unless compiler_debugged (#10489)
Thomas Miedema [Thu, 30 Jul 2015 19:50:10 +0000 (21:50 +0200)] 
Testsuite: skip T10489 unless compiler_debugged (#10489)

4 years agoTestsuite: mark tests recently fixed as passing + accept new stderr
Thomas Miedema [Thu, 30 Jul 2015 19:58:32 +0000 (21:58 +0200)] 
Testsuite: mark tests recently fixed as passing + accept new stderr

Update submodule array.

4 years agoTestsuite: rename rename/should_fail/T5001 to T5001b (#5001)
Thomas Miedema [Thu, 30 Jul 2015 17:27:05 +0000 (19:27 +0200)] 
Testsuite: rename rename/should_fail/T5001 to T5001b (#5001)

Test names should be unique. This fixes a framework failure.

4 years agoFix comment that confused Haddock
Simon Peyton Jones [Thu, 30 Jul 2015 16:52:59 +0000 (17:52 +0100)] 
Fix comment that confused Haddock

I wish Haddock did not fall over when some random non-Haddock comment
contains *'s.  I got

  compiler/rename/RnBinds.hs:732:8: error:
    parse error on input ‘-- *are not* in scope in the SPECIALISE instance pramas; e.g.’

This patch says '-- /are not/ in scope...' to pacify Haddock.

4 years agoTypos in comments and strings
Gabor Greif [Thu, 30 Jul 2015 15:06:33 +0000 (17:06 +0200)] 
Typos in comments and strings

Note: the haddock comment in TyCon.hs seems to be
      garbled syntactically and grammatically

4 years agoImprove error message for newtypes and deriving clauses
John Wiegley [Thu, 30 Jul 2015 13:08:28 +0000 (15:08 +0200)] 
Improve error message for newtypes and deriving clauses

Change the error message generated when a deriving clause related to a newtype
fails to always suggested trying GeneralizedNewtypeDeriving, even in
situations where it may not work. Fixes #9600.

Test Plan: testsuite/deriving/should_fail/9600.hs

Reviewers: austin, bgamari, simonpj

Rebased-by: bgamari
Reviewed By: simonpj

Subscribers: bgamari, hvr, simonmar, carter

Differential Revision:

GHC Trac Issues: #9600

4 years agoFix misspelled function name in a comment
Bartosz Nitka [Thu, 30 Jul 2015 13:05:05 +0000 (15:05 +0200)] 
Fix misspelled function name in a comment

Test Plan: none

Reviewers: austin, simonmar, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

4 years agoMake headers C++ compatible (fixes #10700)
Alexey Shmalko [Thu, 30 Jul 2015 08:37:05 +0000 (10:37 +0200)] 
Make headers C++ compatible (fixes #10700)

Some headers used `new` as parameter name, which is reserved word in
C++. This patch changes these names to `new_`.

Test Plan: validate

Reviewers: austin, ezyang, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10700

4 years agoMake configure error out on missing ghc-tarballs on Windows
Tamar Christina [Thu, 30 Jul 2015 08:36:45 +0000 (10:36 +0200)] 
Make configure error out on missing ghc-tarballs on Windows

Currently checking out the source on windows requires two git
checkouts. One for the GHC sources and one for the GHC-tarballs.

This patch will make configure issue an error if compiling under
windows and the GHC-tarballs folder is missing.

On failure the user is told which command they need to run to get the
tarballs or if they want configure to handle it for them configure
provide the `--enable-tarballs-autodownload` flag.

Test Plan:
1. make sure ghc-tarballs folder is not present
2. run ./configure which should fail giving an error that tarballs is
missing and how to get it
3. run ./configure --enable-tarballs-autodownload and the tarballs
should be downloaded and configure finishes
4. rerun the command in 3, no new download should be done.
5. run configure without --enable-tarballs-autodownload, configure
should finish correctly.

Reviewers: bgamari, austin, thomie

Reviewed By: thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10705

4 years agoDon't allowInterrupt inside uninterruptibleMask
Ben Gamari [Mon, 27 Jul 2015 13:04:43 +0000 (15:04 +0200)] 
Don't allowInterrupt inside uninterruptibleMask

This fixes #9516.

Differential Revision:

Authored-by: Edsko de Vries <>
4 years agoFix missing files
Simon Peyton Jones [Thu, 30 Jul 2015 14:52:09 +0000 (15:52 +0100)] 
Fix missing files

These two testsuite files were correct in my build
tree but not in my source tree; apologies.

4 years agoBetter treatment of signatures in cls/inst
Simon Peyton Jones [Thu, 30 Jul 2015 14:06:55 +0000 (15:06 +0100)] 
Better treatment of signatures in cls/inst

The provoking cause for this patch is Trac #5001, comment:23.  There
was an INLINE pragma in an instance decl, that shouldn't be there.
But there was no complaint, just a  mysterious WARN later.

I ended up having to do some real refactoring but the result is,
I think, simpler and more robust.

4 years agoModify spec002 to be less trivial
Simon Peyton Jones [Tue, 28 Jul 2015 21:24:46 +0000 (22:24 +0100)] 
Modify spec002 to be less trivial

As it stood the main function in the test always returned
bottom, and GHC noticed that and therefore made no attempt
to optimise it, which rather negated the test.

This change makes it non-vacuous.

4 years agoThe parallel package has warnings
Simon Peyton Jones [Thu, 30 Jul 2015 10:01:55 +0000 (11:01 +0100)] 
The parallel package has warnings

This patch suppresses them until they are fixed

libraries/parallel/Control/Parallel/Strategies.hs:513:2: warning:
    Rule "parList/rseq" may never fire
      because ‘rseq’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘rseq’

libraries/parallel/Control/Parallel/Strategies.hs:582:1: warning:
    Rule "evalBuffer/rseq" may never fire
      because ‘rseq’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘rseq’

libraries/parallel/Control/Parallel/Strategies.hs:583:1: warning:
    Rule "parBuffer/rseq" may never fire
      because ‘rseq’ might inline first
    Probable fix: add an INLINE[n] or NOINLINE[n] pragma for ‘rseq’

4 years agoFix Trac #10694: CPR analysis
Simon Peyton Jones [Wed, 29 Jul 2015 15:55:24 +0000 (16:55 +0100)] 
Fix Trac #10694: CPR analysis

In this commit
   commit 0696fc6d4de28cb589f6c751b8491911a5baf774
   Author: Simon Peyton Jones <>
   Date:   Fri Jun 26 11:40:01 2015 +0100

I made an error in the is_var_scrut tests in extendEnvForProdAlt.

This patch fixes it, thereby fixing Trac #10694.

4 years agoFix an outright error in competesWith
Simon Peyton Jones [Wed, 29 Jul 2015 15:43:29 +0000 (16:43 +0100)] 
Fix an outright error in competesWith

competesWith is a very recent function, introduced in:

  commit 2d88a531b7e4dbf4016dca4b1ba3b5dc34256cf4
  Author: Simon Peyton Jones <>
  Date:   Fri Jul 24 12:50:42 2015 +0100

      Improve warnings for rules that might not fire

4 years agoSpit out a little more info with -dppr-debug
Simon Peyton Jones [Wed, 29 Jul 2015 15:39:14 +0000 (16:39 +0100)] 
Spit out a little more info with -dppr-debug

4 years agoDefine DsUtils.mkCastDs and use it
Simon Peyton Jones [Wed, 29 Jul 2015 15:38:44 +0000 (16:38 +0100)] 
Define DsUtils.mkCastDs and use it

This change avoids a spurious WARNing from mkCast.  In the output of
the desugarer (only, I think) we can have a cast where the type of the
expression and cast don't syntactically match, because of an enclosing
type-let binding.

4 years agoDeal with phantom type variables in rules
Simon Peyton Jones [Wed, 29 Jul 2015 15:06:29 +0000 (16:06 +0100)] 
Deal with phantom type variables in rules

See Note [Unbound template type variables] in Rules.hs
This fixes Trac #10689.

The problem was a rule LHS that mentioned a type variable
in a phantom argument to a type synonym.  Then matching the
LHS didn't bind the type variable, and the rule matcher

This patch fixes the problem, as described by the Note.

I also went back to not-cloning the template varaibles during
rule matching.  I'm convinced that it's not necessary now
(if it ever was), and cloning makes the fix for #10689 much more

4 years agoComments only
Simon Peyton Jones [Wed, 29 Jul 2015 15:02:25 +0000 (16:02 +0100)] 
Comments only

4 years agoAdd a missing check for -fcpr-off
Reid Barton [Wed, 29 Jul 2015 16:27:50 +0000 (12:27 -0400)] 
Add a missing check for -fcpr-off

Test Plan: validate

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #10696

4 years agoEliminate zero_static_objects_list()
Simon Marlow [Tue, 28 Jul 2015 19:58:25 +0000 (20:58 +0100)] 
Eliminate zero_static_objects_list()

[Revised version of D1076 that was committed and then backed out]

In a workload with a large amount of code, zero_static_objects_list()
takes a significant amount of time, and furthermore it is in the
single-threaded part of the GC.

This patch uses a slightly fiddly scheme for marking objects on the
static object lists, using a flag in the low 2 bits that flips between
two states to indicate whether an object has been visited during this
GC or not.  We also have to take into account objects that have not
been visited yet, which might appear at any time due to runtime linking.

Test Plan: validate

Reviewers: austin, ezyang, rwbarton, bgamari, thomie

Reviewed By: bgamari, thomie

Subscribers: thomie

Differential Revision:

4 years agoFallout from more assiduous RULE warnings
Simon Peyton Jones [Tue, 28 Jul 2015 15:00:20 +0000 (16:00 +0100)] 
Fallout from more assiduous RULE warnings

GHC now warns if rules compete, so that it's not predicatable
which will work and which will not. E.g.

  f (g x) = ...
  g True  = ...

If we had (f (g True)) it's not clear which rule would fire.

This showed up fraility in the libraries.

* Suppress warnigns in Control.Arrow, Control.Category for class
  methods. At the moment we simply don't have a good way to write a
  RULE with a class method in the LHS.  See Trac #1595.  Arrow and
  Category attempt to do so; I have silenced the complaints with
  -fno-warn-inline-rule-shadowing, but it's not a great solution.

* Adjust the NOINLINE pragma on '' to account for the
  map/coerce rule

* Adjust the rewrite rules in Enum, especially for the "literal 1"
  case.  See Note [Enum Integer rules for literal 1].

* Suppress warnings for 'bytestring' e.g.
   libraries/bytestring/Data/ByteString.hs:895:1: warning:
      Rule "ByteString specialise break (x==)" may never fire
        because rule "Class op ==" for ‘==’ might fire first
      Probable fix: add phase [n] or [~n] to the competing rule

4 years agoTest case for #10698
Joachim Breitner [Tue, 28 Jul 2015 11:19:34 +0000 (13:19 +0200)] 
Test case for #10698

the expected error message is from an older version of GHC; I don’t know
the exact error message that we should get here until the bug is

4 years agoRevert "Eliminate zero_static_objects_list()"
Simon Marlow [Mon, 27 Jul 2015 14:51:16 +0000 (15:51 +0100)] 
Revert "Eliminate zero_static_objects_list()"

This reverts commit b949c96b4960168a3b399fe14485b24a2167b982.

4 years agoRevert "RetainerProfile: Add missing UNTAG_STATIC_LIST_PTR"
Simon Marlow [Mon, 27 Jul 2015 14:51:08 +0000 (15:51 +0100)] 
Revert "RetainerProfile: Add missing UNTAG_STATIC_LIST_PTR"

This reverts commit 09d05050346c1be7bac20ba3f40861e05217368b.

4 years agoImprove warnings for rules that might not fire
Simon Peyton Jones [Fri, 24 Jul 2015 11:50:42 +0000 (12:50 +0100)] 
Improve warnings for rules that might not fire

Two main things here

* Previously we only warned about the "head" function of the rule,
  but actually the warning applies to any free variable on the LHS.

* We now warn not only when one of these free vars can inline, but
  also if it has an active RULE (c.f. Trac #10528)

See Note [Rules and inlining/other rules] in Desugar

This actually shows up quite a few warnings in the libraries, notably
in Control.Arrow, where it correctly points out that rules like
    "compose/arr"   forall f g .
                    (arr f) . (arr g) = arr (f . g)
might never fire, because the rule for 'arr' (dictionary selection)
might fire first.  I'm not really sure what to do here; there is some
discussion in Trac #10595.

A minor change is adding BasicTypes.pprRuleName to pretty-print RuleName.

4 years agoDo not inline or apply rules on LHS of rules
Simon Peyton Jones [Mon, 27 Jul 2015 12:56:31 +0000 (13:56 +0100)] 
Do not inline or apply rules on LHS of rules

This is the right thing to do anyway, and fixes Trac #10528

4 years agoRemove runSTRep from PrelNames
Reid Barton [Mon, 27 Jul 2015 11:20:01 +0000 (13:20 +0200)] 
Remove runSTRep from PrelNames

It has no special treatment in the compiler any more. The last use
was removed in 99d4e5b4a0bd "Implement cardinality analysis".

Test Plan: validate

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: thomie

Differential Revision:

4 years agoAdd UInfixT to TH types (fixes #10522)
Michael Smith [Mon, 27 Jul 2015 11:19:01 +0000 (13:19 +0200)] 
Add UInfixT to TH types (fixes #10522)

UInfixT is like UInfixE or UInfixP but for types. Template Haskell
splices can use it to punt fixity handling to GHC when constructing

UInfixT is converted in compiler/hsSyn/Convert to a right-biased tree of
HsOpTy, which is already rearranged in compiler/rename/RnTypes to match
operator fixities.

This patch consists of (1) adding UInfixT to the AST, (2) implementing
the conversion and updating relevant comments, (3) updating
pretty-printing and library support, and (4) adding tests.

Test Plan: validate

Reviewers: austin, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10522

4 years agoImplementation of StrictData language extension
Adam Sandberg Eriksson [Mon, 27 Jul 2015 11:18:36 +0000 (13:18 +0200)] 
Implementation of StrictData language extension

This implements the `StrictData` language extension, which lets the
programmer default to strict data fields in datatype declarations on a
per-module basis.

Specification and motivation can be found at

This includes a tricky parser change due to conflicts regarding `~` in
the type level syntax: all ~'s are parsed as strictness annotations (see
`strict_mark` in Parser.y) and then turned into equality constraints at
the appropriate places using `RdrHsSyn.splitTilde`.

Updates haddock submodule.

Test Plan: Validate through Harbormaster.

Reviewers: goldfire, austin, hvr, simonpj, tibbe, bgamari

Reviewed By: simonpj, tibbe, bgamari

Subscribers: lelf, simonpj, alanz, goldfire, thomie, bgamari, mpickering

Differential Revision:

GHC Trac Issues: #8347

4 years agoComment tweaks only
Reid Barton [Sun, 26 Jul 2015 03:36:29 +0000 (23:36 -0400)] 
Comment tweaks only

4 years agoAdd missing parentheses in eqBigNatWord#
Reid Barton [Sun, 26 Jul 2015 03:01:49 +0000 (23:01 -0400)] 
Add missing parentheses in eqBigNatWord#

I'm pretty sure that parentheses were intended here. But oddly, they
make very little difference.

The presumably intended expression
    (sizeofBigNat# bn ==# 1#) `andI#` (bigNatToWord bn `eqWord#` w#)
is 1# exactly when bn consists of a single limb equal to w#, clearly.

In the original expression
    sizeofBigNat# bn ==# 1# `andI#` (bigNatToWord bn `eqWord#` w#)
the right-hand side of ==# is always 0# or 1#. So it is 1# when bn
consists of a single limb equal to w#. It is also 1# when bn has
zero limbs and the word past the end of bn does not happen to be
equal to w#. So in practice the difference is that nullBigNat was
eqBigNatWord# to almost everything, but eqBigNatWord# is never
supposed to be called on nullBigNat anyways.

Note that even the corrected version might perform an out-of-bounds
memory access if passed nullBigNat, because `andI#` is not guaranteed
to short-circuit, though in fact GHC does convert isZeroBigNat to a
series of branches in my local build.

Test Plan: validate

Reviewers: hvr, bgamari, goldfire, austin

Reviewed By: hvr, bgamari

Subscribers: thomie

Differential Revision:

4 years agoUse isTrue# around primitive comparisons in integer-gmp
Reid Barton [Sun, 26 Jul 2015 03:00:52 +0000 (23:00 -0400)] 
Use isTrue# around primitive comparisons in integer-gmp

The form
  case na# ==# nb# of
    0# -> ...
    _  -> ...
sometimes generates convoluted assembly, see #10676.
timesInt2Integer was the most spectacular offender, especially as
it is a rather cheap function overall (no calls to gmp).

I checked a few instances and some of the old generated assembly
was fine already, but I changed them all for consistency. The new
form is also more consistent with use of these primops in general.

Test Plan: validate

Reviewers: hvr, bgamari, goldfire, austin

Reviewed By: hvr

Subscribers: thomie

Differential Revision:

4 years ago-include-pkg-deps takes only one hyphen.
Edward Z. Yang [Sat, 25 Jul 2015 21:28:11 +0000 (14:28 -0700)] 
-include-pkg-deps takes only one hyphen.

Signed-off-by: Edward Z. Yang <>
4 years agorenamer: fix module-level deprecation message
Sergei Trofimovich [Sat, 25 Jul 2015 08:37:44 +0000 (09:37 +0100)] 
renamer: fix module-level deprecation message

Noticed today that deprecation warnings are
slightly broken in -HEAD:

  mtl-2.2.1/Control/Monad/Error/Class.hs:46:1: warning:
    Module ‘Control.Monad.Trans.Error’ is deprecated:
      ([", U, s, e,  , C, o, n, t, r, o, l, ., M, o, n, a, d, ., T, r, a,
        n, s, ., E, x, c, e, p, t,  , i, n, s, t, e, a, d, "],
       Use Control.Monad.Trans.Except instead)

Commit e6191d1cc37e98785af8b309100ea840084fa3ba
slightly changed WarningTxt declaration:

-data WarningTxt = WarningTxt (Located SourceText) [Located FastString]
-                | DeprecatedTxt (Located SourceText) [Located FastString]
+data WarningTxt = WarningTxt (Located SourceText)
+                             [Located (SourceText,FastString)]
+                | DeprecatedTxt (Located SourceText)
+                                [Located (SourceText,FastString)]

But 'moduleWarn' function was not updated to do the stripping.

Signed-off-by: Sergei Trofimovich <>
Reviewers: austin, bgamari, hvr, goldfire, rwbarton, alanz

Reviewed By: rwbarton, alanz

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10313

4 years agoRetainerProfile: Add missing UNTAG_STATIC_LIST_PTR
Ben Gamari [Fri, 24 Jul 2015 15:41:59 +0000 (11:41 -0400)] 
RetainerProfile: Add missing UNTAG_STATIC_LIST_PTR

4 years agoImprove instanceCantMatch
Simon Peyton Jones [Fri, 24 Jul 2015 09:42:05 +0000 (10:42 +0100)] 
Improve instanceCantMatch

When staring at instanceCantMatch I realised that it
was returning False (safe but inefficient) when it could
validly return True, on arguments like
   [Nothing,   Just Int]
   [Just Bool, Just Bool]

This patch makes it a bit cleverer.

4 years agoRefactoring around FunDeps
Simon Peyton Jones [Fri, 24 Jul 2015 09:40:35 +0000 (10:40 +0100)] 
Refactoring around FunDeps

This refactoring was triggered by Trac #10675.

We were using 'improveClsFD' (previously called 'checkClsFD') for
  * Improvement: improving a constraint against top-level instances
  * Consistency: checking when two top-level instances are

Using the same code for both seemed attractive at the time, but
it's just too complicated.  So I've split it:
 * Improvement: improveClsFD
 * Consistency: checkFunDeps

Much clearer now!

4 years agoComments about stricteness of catch#
Simon Peyton Jones [Fri, 24 Jul 2015 09:32:01 +0000 (10:32 +0100)] 
Comments about stricteness of catch#

In "Improve strictness analysis for exceptions"
   commit 7c0fff41789669450b02dc1db7f5d7babba5dee6
   Author: Simon Peyton Jones <>
   Date:   Tue Jul 21 12:28:42 2015 +0100

I made catch# strict in its first argument.  But today I found
a very old comment suggesting the opposite.  I disagree with the
old comment, but I've elaborated the Note, which I reproduce here:

    {- Note [Strictness for mask/unmask/catch]
    Consider this example, which comes from GHC.IO.Handle.Internals:
       wantReadableHandle3 f ma b st
         = case ... of
             DEFAULT -> case ma of MVar a -> ...
             0#      -> maskAsynchExceptions#
                           (\st -> case ma of MVar a -> ...)
    The outer case just decides whether to mask exceptions, but we
    don't want thereby to hide the strictness in 'ma'!  Hence the use
    of strictApply1Dmd.

    For catch, we know that the first branch will be evaluated, but
    not necessarily the second.  Hence strictApply1Dmd and

    Howver, consider
        catch# (\st -> case x of ...) (..handler..) st
    We'll see that the entire thing is strict in 'x', so 'x' may be
    evaluated before the catch#.  So fi evaluting 'x' causes a
    divide-by-zero exception, it won't be caught.  This seems
      - x might be evaluated somewhere else outside the catch# anyway
      - It's an imprecise eception anyway.  Synchronous exceptions (in
        the IO monad) will never move in this way.
    There was originally a comment
      "Catch is actually strict in its first argument
       but we don't want to tell the strictness
       analyser about that, so that exceptions stay inside it."
    but tracing it back through the commit logs did not give any
    rationale.  And making catch# lazy has performance costs for

4 years agoComments only
Simon Peyton Jones [Thu, 23 Jul 2015 11:49:06 +0000 (12:49 +0100)] 
Comments only

4 years agoFix line number in T10018 testcase
Ben Gamari [Fri, 24 Jul 2015 07:25:27 +0000 (03:25 -0400)] 
Fix line number in T10018 testcase

4 years agoLibrary names, with Cabal submodule update
Edward Z. Yang [Tue, 23 Jun 2015 20:15:17 +0000 (13:15 -0700)] 
Library names, with Cabal submodule update

A library name is a package name, package version, and hash of the
version names of all textual dependencies (i.e. packages which were included.) A library
name is a coarse approximation of installed package IDs, which are suitable for
inclusion in package keys (you don't want to put an IPID in a package key, since
it means the key will change any time the source changes.)

    - We define ShPackageKey, which is the semantic object which
      is hashed into a PackageKey.  You can use 'newPackageKey'
      to hash a ShPackageKey to a PackageKey

    - Given a PackageKey, we can lookup its ShPackageKey with
      'lookupPackageKey'.  The way we can do this is by consulting
      the 'pkgKeyCache', which records a reverse mapping from
      every hash to the ShPackageKey.  This means that if you
      load in PackageKeys from external sources (e.g. interface
      files), you also need to load in a mapping of PackageKeys
      to their ShPackageKeys so we can populate the cache.

    - We define a 'LibraryName' which encapsulates the full
      depenency resolution that Cabal may have selected; this
      is opaque to GHC but can be used to distinguish different
      versions of a package.

    - Definite packages don't have an interesting PackageKey,
      so we rely on Cabal to pass them to us.

    - We can pretty-print package keys while displaying the
      instantiation, but it's not wired up to anything (e.g.
      the Outputable instance of PackageKey).

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10566

4 years agoAdd a few comments from SPJ on fixity declarations
Ben Gamari [Tue, 21 Jul 2015 20:27:18 +0000 (22:27 +0200)] 
Add a few comments from SPJ on fixity declarations

4 years agoghci: fixity declarations for infix data constructors (#10018)
Thomas Miedema [Tue, 21 Jul 2015 20:01:49 +0000 (22:01 +0200)] 
ghci: fixity declarations for infix data constructors (#10018)

Declaring a custom fixity for an infix data constructor should work:

    Prelude> data Infix a b = a :@: b; infixl 4 :@:

This is a followup to #2947, which handled fixity declarations in ghci
statements (e.g. let add = (+); infixl 6 `add`).

Support for declarations (data, type, newtype, class, instance,
deriving, and foreign) was added to GHCi in #4929.

Reviewers: simonpj, austin, thomie

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10018

4 years agoDocument type functions in the Paterson conditions
Simon Peyton Jones [Thu, 23 Jul 2015 11:24:14 +0000 (12:24 +0100)] 
Document type functions in the Paterson conditions

4 years agoSlight refactoring to the fix for #4012
Simon Peyton Jones [Thu, 23 Jul 2015 11:23:22 +0000 (12:23 +0100)] 
Slight refactoring to the fix for #4012

Add CoreSyn.chooseOrphanAnchor, and use it

4 years agorts/sm: Add missing argument names in function definitions
Ben Gamari [Thu, 23 Jul 2015 12:49:13 +0000 (08:49 -0400)] 
rts/sm: Add missing argument names in function definitions

C99 does not allow unnamed parameters in definition argument lists [1].


4 years agoDataCon: Fix redundant import
Ben Gamari [Thu, 23 Jul 2015 10:53:49 +0000 (12:53 +0200)] 
DataCon: Fix redundant import

4 years agoParenthesise TypeOperator in import hints
Thomas Winant [Thu, 23 Jul 2015 09:43:21 +0000 (11:43 +0200)] 
Parenthesise TypeOperator in import hints

When a constructor was mistakenly imported directly instead of as a
constructor of a data type, a hint will be shown on how to correctly
it. Just like the constructor, the data type should be surrounded in
parentheses if it is an operator (TypeOperator in this case).

Instead of:

        In module ‘Data.Type.Equality’:
          ‘Refl’ is a data constructor of ‘:~:’
        To import it use
          ‘import’ Data.Type.Equality( :~:( Refl ) )
          ‘import’ Data.Type.Equality( :~:(..) )


        In module ‘Data.Type.Equality’:
          ‘Refl’ is a data constructor of ‘(:~:)’
        To import it use
          ‘import’ Data.Type.Equality( (:~:)( Refl ) )
          ‘import’ Data.Type.Equality( (:~:)(..) )

Test Plan: pass new test

Reviewers: austin, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision:

GHC Trac Issues: #10668

4 years agoUpdate encoding001 to test the full range of non-surrogate code points
Reid Barton [Thu, 23 Jul 2015 09:43:07 +0000 (11:43 +0200)] 
Update encoding001 to test the full range of non-surrogate code points

GHC has used surrogate code points for roundtripping since 7.4.
See Note [Roundtripping].

Also, improve the wording of that Note slightly.

Test Plan: validate still passes

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

4 years agoAccept next-docstrings on GADT constructors.
Ben Gamari [Thu, 23 Jul 2015 09:42:07 +0000 (11:42 +0200)] 
Accept next-docstrings on GADT constructors.

Accept next docstrings (`-- | Docstring`) on GADT constructors.

I have confirmed that this adds no shift/reduce conflicts.

Test Plan: haddockA034

Reviewers: austin, simonpj, simonmar

Reviewed By: simonmar

Subscribers: Fuuzetsu, simonmar, thomie, mpickering, edsko

Differential Revision:

4 years agoGenerate .dyn_o files for .hsig files with -dynamic-too
Michael Smith [Thu, 23 Jul 2015 09:41:16 +0000 (11:41 +0200)] 
Generate .dyn_o files for .hsig files with -dynamic-too

With -dynamic-too, .dyn_o files were not being generated for .hsig
files.  Normally, this is handled in the pipeline; however, the branch
for .hsig files called compileEmptyStub directly instead of going
through runPipeline.  When compiling a Cabal package that included .hsig
files, this triggered a linker error later on, as it expected a .dyn_o
file to have been generated for each .hsig.

The fix is to use runPipeline for .hsig files, just as with .hs files.
Alternately, one could duplicate the logic for handling -dynamic-too in
the .hsig branch, but simply calling runPipeline ends up being much

Test Plan: validate

Reviewers: austin, ezyang, bgamari, thomie

Reviewed By: ezyang, thomie

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #10660

4 years agoLexer: support consecutive references to Haddock chunks (#10398)
Thomas Miedema [Thu, 23 Jul 2015 09:40:37 +0000 (11:40 +0200)] 
Lexer: support consecutive references to Haddock chunks (#10398)

Reviewers: austin, bgamari, Fuuzetsu

Reviewed By: bgamari

Subscribers: thomie, bgamari

Differential Revision:

GHC Trac Issues: #10398

4 years agoComments only
Simon Peyton Jones [Thu, 23 Jul 2015 07:34:10 +0000 (08:34 +0100)] 
Comments only

4 years agoFix Trac #10670
Simon Peyton Jones [Thu, 23 Jul 2015 07:33:43 +0000 (08:33 +0100)] 
Fix Trac #10670

In dataConCannotMatch we were using a GADT data con without
properly instantiating the existential type variables.
The fix is easy, and the code is tighter.

4 years agoUse lookupIfaceTop for loading IfaceDecls.
Edward Z. Yang [Wed, 22 Jul 2015 00:16:52 +0000 (17:16 -0700)] 
Use lookupIfaceTop for loading IfaceDecls.

It's shorter!  And then when Backpack overrides lookupIfaceTop
everyone will see the right information.

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

Differential Revision:

4 years agoSome utility functions for testing IfaceType equality.
Edward Z. Yang [Wed, 22 Jul 2015 00:04:38 +0000 (17:04 -0700)] 
Some utility functions for testing IfaceType equality.

These are going to be used by Backpack, but someone else
might find them useful.  They do the "obvious thing".

Signed-off-by: Edward Z. Yang <>
Test Plan: validate

Reviewers: goldfire, bgamari, austin

Subscribers: thomie

Differential Revision:

4 years agoExport alwaysQualifyPackages and neverQualifyPackages.
Edward Z. Yang [Wed, 22 Jul 2015 00:09:38 +0000 (17:09 -0700)] 
Export alwaysQualifyPackages and neverQualifyPackages.

Signed-off-by: Edward Z. Yang <>
4 years agoGive more informative panic for checkFamInstConsistency.
Edward Z. Yang [Wed, 22 Jul 2015 00:06:39 +0000 (17:06 -0700)] 
Give more informative panic for checkFamInstConsistency.

Signed-off-by: Edward Z. Yang <>
4 years agoAdd ExceptionMonad instance for IOEnv.
Edward Z. Yang [Wed, 22 Jul 2015 00:05:16 +0000 (17:05 -0700)] 
Add ExceptionMonad instance for IOEnv.

Signed-off-by: Edward Z. Yang <>