3 years agoPretty print reasons for Many wip/T10613
Joachim Breitner [Wed, 6 Jul 2016 13:44:07 +0000 (15:44 +0200)] 
Pretty print reasons for Many

3 years agoAdd perl script to aggreate numbers for the demand analysis paper
Joachim Breitner [Mon, 4 Jul 2016 11:49:22 +0000 (13:49 +0200)] 
Add perl script to aggreate numbers for the demand analysis paper

Don't worry, this is not intended to enter the master.

3 years agoENTER must not short-circuit COUNTING_IND
Joachim Breitner [Mon, 4 Jul 2016 11:40:01 +0000 (13:40 +0200)] 
ENTER must not short-circuit COUNTING_IND

3 years agoDmdAnal: Remember why “Many” things are many, even through ifaces
Joachim Breitner [Mon, 4 Jul 2016 08:16:07 +0000 (10:16 +0200)] 
DmdAnal: Remember why “Many” things are many, even through ifaces

3 years ago[Temporary hack, not for master] DmdAnal: Remember by “Many” things are many
Joachim Breitner [Mon, 2 May 2016 12:12:51 +0000 (14:12 +0200)] 
[Temporary hack, not for master] DmdAnal: Remember by “Many” things are many

I change the type
data Count = One | Many
data Count = One | Many [String]
and use these list of strings (always sorted and nub'ed) to track the
various reasons why something is called many times.

3 years agoTemporarily move regular entry counting to the COUNTING_IND
Joachim Breitner [Wed, 23 Mar 2016 13:28:34 +0000 (14:28 +0100)] 
Temporarily move regular entry counting to the COUNTING_IND

3 years agoRough working implementation of #10613
Joachim Breitner [Thu, 17 Mar 2016 15:33:18 +0000 (16:33 +0100)] 
Rough working implementation of #10613

The COUNTING_IND closure type is based on the (since removed) IND_PERM.

Some of the code is rather ad-hoc and likely in need of some refactoring
and clean-up before entering master (if it ever should), but it should
be good enough to play around with it and obtain some numbers.

3 years agoRemove dead code: countOnce, countMany
Joachim Breitner [Mon, 2 May 2016 10:34:25 +0000 (12:34 +0200)] 
Remove dead code: countOnce, countMany

and export Count abstractly (the constructors are not used anywhere).

3 years agoAbort the build when a Core plugin pass is specified in stage1 compiler
Ömer Sinan Ağacan [Fri, 17 Jun 2016 07:54:28 +0000 (07:54 +0000)] 
Abort the build when a Core plugin pass is specified in stage1 compiler

This also makes the behavior the same with frontend plugin errors --
frontend was failing with an exception (`CmdLineError`) while the
simplifier was just ignoring plugins. Now we abort with `CmdLineError`
in both cases with a slightly improved error message.

Test Plan:
- add tests (will add tests once #12197 is implemented)
- validate (done)

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11690

3 years agoCoreMonad: Update error msg function docs
Ömer Sinan Ağacan [Thu, 16 Jun 2016 08:51:55 +0000 (08:51 +0000)] 
CoreMonad: Update error msg function docs

3 years agoMajor patch to introduce TyConBinder
Simon Peyton Jones [Wed, 15 Jun 2016 12:27:12 +0000 (13:27 +0100)] 
Major patch to introduce TyConBinder

Before this patch, following the TypeInType innovations,
each TyCon had two lists:
  - tyConBinders :: [TyBinder]
  - tyConTyVars  :: [TyVar]

They were in 1-1 correspondence and contained
overlapping information.  More broadly, there were many
places where we had to pass around this pair of lists,
instead of a single list.

This commit tidies all that up, by having just one list of
binders in a TyCon:

  - tyConBinders :: [TyConBinder]

The new data types look like this:

     data TyVarBndr tyvar vis = TvBndr tyvar vis
     data VisibilityFlag = Visible | Specified | Invisible
     type TyVarBinder = TyVarBndr TyVar VisibilityFlag

     type TyConBinder = TyVarBndr TyVar TyConBndrVis

     data TyConBndrVis
       = NamedTCB VisibilityFlag
       | AnonTCB

     data TyBinder
       = Named TyVarBinder
       | Anon Type

Note that Var.TyVarBdr has moved from TyCoRep and has been
made polymorphic in the tyvar and visiblity fields:

     type TyVarBinder = TyVarBndr TyVar VisibilityFlag
        -- Used in ForAllTy
     type TyConBinder = TyVarBndr TyVar TyConBndrVis
        -- Used in TyCon

     type IfaceForAllBndr  = TyVarBndr IfaceTvBndr VisibilityFlag
     type IfaceTyConBinder = TyVarBndr IfaceTvBndr TyConBndrVis
         -- Ditto, in interface files

There are a zillion knock-on changes, but everything
arises from these types.  It was a bit fiddly to get the
module loops to work out right!

Some smaller points
* Nice new functions
  which help you make the tyvar binders for dependently-typed
  TyCons.  See comments with their definition.

* The change showed up a bug in TcGenGenerics.tc_mkRepTy, where the code
  was making an assumption about the order of the kind variables in the
  kind of GHC.Generics.(:.:).  I fixed this; see TcGenGenerics.mkComp.

3 years agoRe-add FunTy (big patch)
Simon Peyton Jones [Fri, 27 May 2016 14:26:46 +0000 (15:26 +0100)] 
Re-add FunTy (big patch)

With TypeInType Richard combined ForAllTy and FunTy, but that was often
awkward, and yielded little benefit becuase in practice the two were
always treated separately.  This patch re-introduces FunTy.  Specfically

* New type
    data TyVarBinder = TvBndr TyVar VisibilityFlag
  This /always/ has a TyVar it.  In many places that's just what
  what we want, so there are /lots/ of TyBinder -> TyVarBinder changes

* TyBinder still exists:
    data TyBinder = Named TyVarBinder | Anon Type

* data Type = ForAllTy TyVarBinder Type
            | FunTy Type Type
            |  ....

There are a LOT of knock-on changes, but they are all routine.

The Haddock submodule needs to be updated too

3 years agoFix testsuite wibble
Simon Peyton Jones [Wed, 15 Jun 2016 12:33:57 +0000 (13:33 +0100)] 
Fix testsuite wibble typecheck/should_run/T7861

Was concealed behind the haddock perf noise

3 years agoRevert "Make the Ord Module independent of Unique order"
Simon Peyton Jones [Wed, 15 Jun 2016 07:44:11 +0000 (08:44 +0100)] 
Revert "Make the Ord Module independent of Unique order"

This reverts commit 0497ee504cc9ac5d6babee9b98bf779b3fc50b98.

Reason: See Trac #12191.  I'm reverting pending Bartosz's
investigation of what went wrong.

3 years agoSimplify readProcessEnvWithExitCode + set LANGUAGE=C
Thomas Miedema [Sat, 11 Jun 2016 08:43:59 +0000 (10:43 +0200)] 
Simplify readProcessEnvWithExitCode + set LANGUAGE=C

`readProcessEnvWithExitCode` was added in
4d4d07704ee78221607a18b8118294b0aea1bac4, to start an external process
after making some modifications to the environment.

Since then, the `process` library has exposed
`readCreateProcessWithExitCode`, which allows for the refactoring we do

Also change "en" to "C", as suggested in ticket:8825#comment:11.

Reviewed by: trofi

Differential Revision:

GHC Trac Issues: #8825

3 years agoRename cmpType to nonDetCmpType
Bartosz Nitka [Tue, 14 Jun 2016 15:59:07 +0000 (08:59 -0700)] 
Rename cmpType to nonDetCmpType

This makes it obvious that it's nondeterministic and hopefully
will prevent someone from using it accidentally.

GHC Trac: #4012

3 years agoDon't GC sparks for CAFs
Simon Marlow [Fri, 10 Jun 2016 16:07:13 +0000 (17:07 +0100)] 
Don't GC sparks for CAFs

We can't tell whether the CAF is actually garbage or not.

3 years agoTestsuite: enable ghci.prog010 (#2542)
Thomas Miedema [Mon, 13 Jun 2016 12:48:24 +0000 (14:48 +0200)] 
Testsuite: enable ghci.prog010 (#2542)

This test didn't have a `.T` file, so the testsuite driver never ran it.
Luckily the features it tested for didn't break in the past 8 years.

3 years agoBuild system: mention ghc version in bindist's `configure --help` docdir
Thomas Miedema [Tue, 14 Jun 2016 10:32:37 +0000 (12:32 +0200)] 
Build system: mention ghc version in bindist's `configure --help` docdir

This is a follow up to a74a3846c84ad55de3deeed8b2401a2ed514b2e1
, which made the same change but for the toplevel

Reviewed by: erikd

Differential Revision:

GHC Trac Issues: #11659

3 years agoAdjust error message slightly
Simon Peyton Jones [Tue, 14 Jun 2016 06:55:01 +0000 (07:55 +0100)] 
Adjust error message slightly

3 years agoUpdate Haddock to follow change in LHsSigWcType
Simon Peyton Jones [Mon, 13 Jun 2016 17:28:30 +0000 (18:28 +0100)] 
Update Haddock to follow change in LHsSigWcType

Update submodule to accompany this commit:

    commit 15b9bf4ba4ab47e6809bf2b3b36ec16e502aea72
    Author: Simon Peyton Jones <>
    Date:   Sat Jun 11 23:49:27 2016 +0100

        Improve typechecking of let-bindings

Sorry it's late!

3 years agoMake the Ord Module independent of Unique order
Bartosz Nitka [Thu, 9 Jun 2016 15:50:32 +0000 (08:50 -0700)] 
Make the Ord Module independent of Unique order

The `Ord Module` instance currently uses `Unique`s for comparison.
We don't want to use the `Unique` order because it can introduce nondeterminism.
This switches `Ord ModuleName` and `Ord UnitId` to use lexicographic ordering
making `Ord Module` deterministic transitively.

I've run `nofib` and it doesn't make a measurable difference.

See also Note [ModuleEnv determinism and performance].

Test Plan:
run nofib: P112

Reviewers: simonpj, simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoUse UniqFM for SigOf
Bartosz Nitka [Mon, 13 Jun 2016 14:35:32 +0000 (07:35 -0700)] 
Use UniqFM for SigOf

The Ord instance for ModuleName is currently implemented in
terms of Uniques causing potential determinism problems.
I plan to change it to use the actual FastStrings and in
preparation for that I'm switching to UniqFM where it's
possible (you need *one* Unique per key, and you can't get
the keys back), so that the performance doesn't suffer.

Test Plan: ./validate

Reviewers: simonmar, austin, ezyang, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoKill unused foldModuleEnv
Bartosz Nitka [Mon, 13 Jun 2016 11:53:43 +0000 (04:53 -0700)] 
Kill unused foldModuleEnv

With the current implementation, it's nondeterministic
because Ord Module is nondeterministic.

3 years agoAdd thin library support to Windows too
Tamar Christina [Mon, 13 Jun 2016 11:29:17 +0000 (13:29 +0200)] 
Add thin library support to Windows too

Code already existed in the RTS to add thin library support for non-Windows
operating systems. This adds it to Windows as well.

ar thin libraries have the exact same format as normal archives except they
have a different magic string and they don't copy the object files into the

Instead each header entry points to the location of the object file on disk.
This is useful when a library is only created to satisfy a compile time dependency
instead of to be distributed. This saves the time required for copying.

Test Plan: ./validate and new test T11788

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: bgamari, simonmar

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #11788

3 years agoA second test for Trac #12055
Simon Peyton Jones [Mon, 13 Jun 2016 11:02:54 +0000 (12:02 +0100)] 
A second test for Trac #12055

This one omits the extension, thereby making GHC 8.0 produce
"GHC internal error".

3 years agoTest Trac #12055
Simon Peyton Jones [Mon, 13 Jun 2016 10:56:44 +0000 (11:56 +0100)] 
Test Trac #12055

3 years agoAdd to .gitignore
Simon Peyton Jones [Sun, 12 Jun 2016 21:32:31 +0000 (22:32 +0100)] 
Add to .gitignore

This adds
  *.stackdump    (Windows)
  foo*           (simonpj uses foo* for junk files)

3 years agoRemove some traceTc calls
Simon Peyton Jones [Sun, 12 Jun 2016 21:01:49 +0000 (22:01 +0100)] 
Remove some traceTc calls

During the kind-checking "knot" we have to be careful not
to print too eagerly.

3 years agoBeef up isPredTy
Simon Peyton Jones [Sat, 11 Jun 2016 23:06:31 +0000 (00:06 +0100)] 
Beef up isPredTy

isPredTy can be called on ill-kinded types, especially (of course) if
there is a kind error.  We don't wnat it to crash, but it was, in

This patch introduces piResultTy_maybe, and uses it in isPredTy.

Ugh.  I dislike this code.  It's mainly used to know when we should
print types with '=>', and we should probably have a better way to
signal that.

3 years agoFix the in-scope set for extendTvSubstWithClone
Simon Peyton Jones [Sat, 11 Jun 2016 23:04:30 +0000 (00:04 +0100)] 
Fix the in-scope set for extendTvSubstWithClone

We'd forgotten the variables free in the kind.

Ditto extendCvSubstWithClone

3 years agoBeef up mkNakedCastTy
Simon Peyton Jones [Sat, 11 Jun 2016 23:00:53 +0000 (00:00 +0100)] 
Beef up mkNakedCastTy

By spotting Refl coercions we can avoid building an awful
lot of CastTys.  Simple and effective.

3 years agoMove the constraint-kind validity check
Simon Peyton Jones [Sat, 11 Jun 2016 22:56:42 +0000 (23:56 +0100)] 
Move the constraint-kind validity check

For type synonyms, we need to check that if the RHS has
kind Constraint, then we have -XConstraintKinds.  For
some reason this was done in checkValidType, but it makes
more sense to do it in checkValidTyCon.

I can't remember quite why I made this change; maybe it fixes
a Trac ticket, but if so I forget which.  But it's a modest
improvement anyway.

3 years agoGet in-scope set right in top_instantiate
Simon Peyton Jones [Sat, 11 Jun 2016 22:55:10 +0000 (23:55 +0100)] 
Get in-scope set right in top_instantiate

...thereby being able to replace substThetaUnchecked
with substTheta

3 years agoTidy up zonkQuantifiedTyVar
Simon Peyton Jones [Sat, 11 Jun 2016 22:51:44 +0000 (23:51 +0100)] 
Tidy up zonkQuantifiedTyVar

I managed to eliminate the strange zonkQuantifiedTyVarOrType,
which is no longer used.

3 years agoImprove typechecking of let-bindings
Simon Peyton Jones [Sat, 11 Jun 2016 22:49:27 +0000 (23:49 +0100)] 
Improve typechecking of let-bindings

This major commit was initially triggered by #11339, but it spiraled
into a major review of the way in which type signatures for bindings
are handled, especially partial type signatures.  On the way I fixed a
number of other bugs, namely

The main change is that I completely reorganised the way in which type
signatures in bindings are handled. The new story is in TcSigs
Note [Overview of type signatures].  Some specific:

* Changes in the data types for signatures in TcRnTypes:
  TcIdSigInfo and new TcIdSigInst

* New module TcSigs deals with typechecking type signatures
  and pragmas. It contains code mostly moved from TcBinds,
  which is already too big

* HsTypes: I swapped the nesting of HsWildCardBndrs
  and HsImplicitBndsrs, so that the wildcards are on the
  oustide not the insidde in a LHsSigWcType.  This is just
  a matter of convenient, nothing deep.

There are a host of other changes as knock-on effects, and
it all took FAR longer than I anticipated :-).  But it is
a significant improvement, I think.

Lots of error messages changed slightly, some just variants but
some modest improvements.

New tests

* typecheck/should_compile
    * SigTyVars: a scoped-tyvar test
    * ExPat, ExPatFail: existential pattern bindings
    * T12069
    * T11700
    * T11339

* partial-sigs/should_compile
    * T12033
    * T11339a
    * T11670

One thing to check:

* Small change to output from ghc-api/landmines.
  Need to check with Alan Zimmerman

3 years agoKill off redundant SigTv check in occurCheckExpand
Simon Peyton Jones [Mon, 16 May 2016 21:08:08 +0000 (22:08 +0100)] 
Kill off redundant SigTv check in occurCheckExpand

This patch simply deletes code, the SigTv check in
occurCheckExpand.  As the new comment says

In the past we also rejected a SigTv matched with a non-tyvar
But it is wrong to reject that for Givens;
and SigTv is in any case handled separately by
   - TcUnify.checkTauTvUpdate (on-the-fly unifier)
   - TcInteract.canSolveByUnification (main constraint solver)

3 years agorts: Fix NUMA when cross compiling
Erik de Castro Lopo [Mon, 13 Jun 2016 09:24:18 +0000 (19:24 +1000)] 
rts: Fix NUMA when cross compiling

The NUMA code was enabled whenever numa.h and numaif.h are detected.
Unfortunately, the hosts' header files were being detected even then
cross compiling in the absence of a target libnuma.

Fix that by relying on the the presence of libnuma instead of the
presence of the header files. The test for libnuma does `AC_TRY_LINK`
which will fail if the test program (compiled for the target) can't
be linked against libnuma.

Test Plan:
Build on x86_64/linux and make sure NUMA works and cross compile to

Reviewers: austin, bgamari, hvr, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoDisable T12031 on linux
Tamar Christina [Sun, 12 Jun 2016 12:41:18 +0000 (14:41 +0200)] 
Disable T12031 on linux

3 years agoFix incorrect calculated relocations on Windows x86_64
Tamar Christina [Sat, 11 Jun 2016 08:18:19 +0000 (10:18 +0200)] 
Fix incorrect calculated relocations on Windows x86_64

See #12031 for analysis, but essentially what happens is:

To sum up the issue, the reason this seems to go wrong is because
of how we initialize the `.bss` section for Windows in the runtime linker.

The first issue is where we calculate the zero space for the section:

zspace = stgCallocBytes(1, bss_sz, "ocGetNames_PEi386(anonymous bss)");
sectab_i->PointerToRawData = ((UChar*)zspace) - ((UChar*)(oc->image));

UInt32 PointerToRawData;

This means we're stuffing a `64-bit` value into a `32-bit` one. Also `zspace`
can be larger than `oc->image`. In which case it'll overflow and
then get truncated in the cast.

The address of a value in the `.bss` section is then calculated as:

addr = ((UChar*)(oc->image))
     + (sectabent->PointerToRawData
     + symtab_i->Value);

If it does truncate then this calculation won't be correct (which is what is happening).

We then later use the value of `addr` as the `S` (Symbol) value for the relocations

S = (size_t) lookupSymbol_( (char*)symbol );

Now the majority of the relocations are `R_X86_64_PC32` etc.
e.g. They are guaranteed to fit in a `32-bit` value.

The `R_X86_64_64` introduced for these pseudo-relocations so they can use
the full `48-bit` addressing space isn't as lucky.
As for why it sometimes work has to do on whether the value is truncated or not.

`PointerToRawData` can't be changed because it's size is fixed by the PE specification.

Instead just like with the other platforms, we now use `section` on Windows as well.
This gives us a `start` parameter of type `void*` which solves the issue.

This refactors the code to use `section.start` and to fix the issues.

Test Plan: ./validate and new test added T12031

Reviewers: RyanGlScott, erikd, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12031, #11317

3 years agoSkip retc001 on OSX
Matthew Pickering [Sun, 12 Jun 2016 10:03:43 +0000 (11:03 +0100)] 
Skip retc001 on OSX

See #11204, this test sometimes fails and sometimes passes on OSX
which causes intermittent validate failures if it is run.

3 years agorts: Fix build when USE_LARGE_ADDRESS_SPACE is undefined
Erik de Castro Lopo [Sun, 12 Jun 2016 07:50:39 +0000 (17:50 +1000)] 
rts: Fix build when USE_LARGE_ADDRESS_SPACE is undefined

The recently added NUMA related functions were mistakenly defined
within a `#ifdef USE_LARGE_ADDRESS_SPACE` ... `#endif` block. Moving
them outside this block fixes the build on PowerPC and Arm Linux.

Test Plan: Build on PowerPC or Arm Linux

Reviewers: hvr, austin, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

3 years agoModuleSet: Use an actual set instead of map to units
Ömer Sinan Ağacan [Sat, 11 Jun 2016 14:01:49 +0000 (10:01 -0400)] 
ModuleSet: Use an actual set instead of map to units

3 years agoRts flags cleanup
Simon Marlow [Mon, 23 May 2016 09:42:31 +0000 (10:42 +0100)] 
Rts flags cleanup

* Remove unused/old flags from the structs
* Update old comments
* Add missing flags to GHC.RTS
* Simplify GHC.RTS, remove C code and use hsc2hs instead
* Make ParFlags unconditional, and add support to GHC.RTS

3 years agoNUMA support
Simon Marlow [Sat, 23 Apr 2016 20:14:49 +0000 (21:14 +0100)] 
NUMA support

The aim here is to reduce the number of remote memory accesses on
systems with a NUMA memory architecture, typically multi-socket servers.

Linux provides a NUMA API for doing two things:
* Allocating memory local to a particular node
* Binding a thread to a particular node

When given the +RTS --numa flag, the runtime will
* Determine the number of NUMA nodes (N) by querying the OS
* Assign capabilities to nodes, so cap C is on node C%N
* Bind worker threads on a capability to the correct node
* Keep a separate free lists in the block layer for each node
* Allocate the nursery for a capability from node-local memory
* Allocate blocks in the GC from node-local memory

For example, using nofib/parallel/queens on a 24-core 2-socket machine:

$ ./Main 15 +RTS -N24 -s -A64m
  Total   time  173.960s  (  7.467s elapsed)

$ ./Main 15 +RTS -N24 -s -A64m --numa
  Total   time  150.836s  (  6.423s elapsed)

The biggest win here is expected to be allocating from node-local
memory, so that means programs using a large -A value (as here).

According to perf, on this program the number of remote memory accesses
were reduced by more than 50% by using `--numa`.

Test Plan:
* validate
* There's a new flag --debug-numa=<n> that pretends to do NUMA without
  actually making the OS calls, which is useful for testing the code
  on non-NUMA systems.
* TODO: I need to add some unit tests

Reviewers: erikd, austin, rwbarton, ezyang, bgamari, hvr, niteria

Subscribers: thomie

Differential Revision:

3 years agoSmall refactor to mkRuntimErrorId
Simon Peyton Jones [Thu, 9 Jun 2016 13:44:36 +0000 (14:44 +0100)] 
Small refactor to mkRuntimErrorId

3 years agoMinor refactoring
Simon Peyton Jones [Thu, 9 Jun 2016 13:44:00 +0000 (14:44 +0100)] 
Minor refactoring

Use tauifyExpType rather than something hand-rolled

3 years agoComments only
Simon Peyton Jones [Thu, 9 Jun 2016 13:42:26 +0000 (14:42 +0100)] 
Comments only

...about unarisation and unboxed tuples

3 years agoRefine imports slightly
Simon Peyton Jones [Wed, 1 Jun 2016 13:48:56 +0000 (14:48 +0100)] 
Refine imports slightly

3 years agoComments only
Simon Peyton Jones [Wed, 1 Jun 2016 13:48:36 +0000 (14:48 +0100)] 
Comments only

3 years agoFix #12099: Remove bogus flags
Sean Gillespie [Fri, 10 Jun 2016 10:53:37 +0000 (12:53 +0200)] 
Fix #12099: Remove bogus flags

Remove -fwarn- and -fno-warn- from flagsForCompletion

Testcase: Fix linter error on T12099

For Issue #12099

Reviewers: austin, thomie, bgamari

Reviewed By: austin, thomie, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12099

3 years agoRemove Printer.c:prettyPrintClosure()
Ömer Sinan Ağacan [Fri, 10 Jun 2016 11:13:47 +0000 (07:13 -0400)] 
Remove Printer.c:prettyPrintClosure()

It turns out this function was unused and broken for a long time (fixed
with b0a7664). Removing it as it will probably get broken again in the
future and it's unused.

Reviewers: austin, erikd, simonmar, nomeata, bgamari

Reviewed By: nomeata, bgamari

Subscribers: Phyx, thomie, nomeata

Differential Revision:

3 years agoprettyPrintClosure(): Untag the closure before accessing fields
Ömer Sinan Ağacan [Fri, 10 Jun 2016 10:20:00 +0000 (06:20 -0400)] 
prettyPrintClosure(): Untag the closure before accessing fields

(This fixes segfaults)

3 years agoImprove the error messages for static forms.
Facundo Domínguez [Thu, 9 Jun 2016 15:37:42 +0000 (17:37 +0200)] 
Improve the error messages for static forms.

Now the message explains why closed variables are not closed when
encountered in the body of (static ...).

This required adding to the local environment the free variables of
the local bindings in scope. Thus we can analyze and explain why a
variable is not closed when encountered.

Test Plan: ./validate

Reviewers: austin, simonpj, bgamari

Reviewed By: bgamari

Subscribers: mboes, thomie

Differential Revision:

GHC Trac Issues: #12003

3 years agoFix Ticky histogram on Windows
Tamar Christina [Thu, 9 Jun 2016 15:49:20 +0000 (17:49 +0200)] 
Fix Ticky histogram on Windows

The histogram types are defined in `Ticky.c` as `StgInt` values.


which means they'll be `32-bits` on `x86` and `64-bits` on `x86_64`.

However the `bumpHistogram` in `StgCmmTicky` is incrementing them as if
they're a `cLong`. A long on Windows `x86_64` is `32-bit`.

As such when then value for the `_hst_1` is being set what it's actually doing
is setting the value of the high bits of the first entry.

This ends up giving us `0b‭100000000000000000000000000000000‬` or `4294967296`
as is displayed in the ticket on #8308.

Since `StgInt` is defined using the `WORD` size. Just use that directly in

Also since `cLong` is no longer used after this commit it will also be dropped.

Test Plan: make TEST=T8308

Reviewers: mlen, jstolarek, bgamari, thomie, goldfire, simonmar, austin

Reviewed By: bgamari, thomie

Subscribers: #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #8308

3 years agoDocs: delete PatternGuards documentation
Thomas Miedema [Thu, 9 Jun 2016 11:51:09 +0000 (13:51 +0200)] 
Docs: delete PatternGuards documentation

Since `-XPatternGuards` is enabled by default, invert the logic and
mention `-XNoPatternGuards` first.

Also, since this is a Haskell 2010 feature, refer to the language report
instead of explaining it.

In general, I would like to follow the guideline of assuming the latest
language report as a given, and then only report GHC's deviations and
extensions relative to that report.

Reviewed by: bgamari

Differential Revision:

GHC Trac Issues: #12172

3 years agoRemove Ord AltCon
Bartosz Nitka [Thu, 9 Jun 2016 14:25:11 +0000 (07:25 -0700)] 
Remove Ord AltCon

It uses Ord DataCon which uses Ord Unique which is

GHC Trac: #4012

3 years agoRemove Ord PatSyn
Bartosz Nitka [Thu, 9 Jun 2016 11:52:48 +0000 (04:52 -0700)] 
Remove Ord PatSyn

It's implemented in terms of Unique which is nondeterministic

GHC Trac: #4012

3 years agoRemove Ord Class
Bartosz Nitka [Thu, 9 Jun 2016 11:48:15 +0000 (04:48 -0700)] 
Remove Ord Class

It was implemented in terms of Unique which is nondeterministic

GHC Trac: #4012

3 years agoDocs: fix links to ghc-flags
Thomas Miedema [Thu, 9 Jun 2016 11:26:35 +0000 (13:26 +0200)] 
Docs: fix links to ghc-flags

3 years agoTestsuite: delete dead code [skip ci]
Thomas Miedema [Wed, 8 Jun 2016 13:38:40 +0000 (15:38 +0200)] 
Testsuite: delete dead code [skip ci]

3 years agoRemove Ord (CoAxiom br)
Bartosz Nitka [Thu, 9 Jun 2016 10:55:38 +0000 (03:55 -0700)] 
Remove Ord (CoAxiom br)

It was implemented in terms of Uniques, but fortunately it's unused
so we can remove it.

GHC Trac: #4012

3 years agoImplement Eq TyCon directly
Bartosz Nitka [Thu, 9 Jun 2016 10:49:00 +0000 (03:49 -0700)] 
Implement Eq TyCon directly

Eq TyCon is defined in terms of Ord TyCon, but we want to
remove Ord TyCon, because it's implemented in terms of unique
comparison, which is nondeterministic.

GHC Trac: #4012

3 years agoRemove special casing of Windows in generic files
Tamar Christina [Tue, 31 May 2016 18:12:55 +0000 (20:12 +0200)] 
Remove special casing of Windows in generic files

Remove some Windows specific code from the .m4 files
and have configure figure it out.

Unfortunately touchy can't be removed since there
is no mingw build of coreutils. Only msys builds
which would give us a dependency on the msys runtime.

Reviewers: hvr, austin, thomie, bgamari

Reviewed By: thomie, bgamari

Subscribers: thomie, erikd, #ghc_windows_task_force

Differential Revision:

3 years agoFix #12076 by inlining trivial expressions in CorePrep.
Edward Z. Yang [Tue, 17 May 2016 04:05:24 +0000 (21:05 -0700)] 
Fix #12076 by inlining trivial expressions in CorePrep.

This mostly follows the plan detailed by the discussion
Simon and I had, with one difference: instead of grabbing
the free variables of the trivial expressions to get the
embedded Ids, we just use getIdFromTrivialExpr_maybe to extract
out the Id.  If there is no Id, the expression cannot
refer to a function (as there are no literal functions)
and thus we do not need to saturate.

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

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12076

3 years agoMinor performance note about IdInfo.
Edward Z. Yang [Mon, 6 Jun 2016 17:18:57 +0000 (10:18 -0700)] 
Minor performance note about IdInfo.

Signed-off-by: Edward Z. Yang <>
3 years agoFix #12064 by making IfaceClass typechecking more lazy.
Edward Z. Yang [Sun, 15 May 2016 23:13:51 +0000 (16:13 -0700)] 
Fix #12064 by making IfaceClass typechecking more lazy.

Comes with a test based off of prog006.

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

Reviewers: simonpj, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #12064

3 years agoShow sources of cost centers in .prof
Ömer Sinan Ağacan [Wed, 8 Jun 2016 13:30:32 +0000 (09:30 -0400)] 
Show sources of cost centers in .prof

This fixes the problem with duplicate cost-centre names that was
reported a couple of times before. When a module implements a typeclass
multiple times for different types, methods of different implementations
get same cost-centre names and are reported like this:

    COST CENTRE MODULE            %time %alloc

    CAF         GHC.IO.Handle.FD    0.0   32.8
    CAF         GHC.Read            0.0    1.0
    CAF         GHC.IO.Encoding     0.0    1.8
    showsPrec   Main                0.0    1.2
    readPrec    Main                0.0   19.4
    readPrec    Main                0.0   20.5
    main        Main                0.0   20.2

                                            individual      inherited
    COST CENTRE  MODULE  no.     entries  %time %alloc   %time %alloc

    MAIN         MAIN     53          0    0.0    0.2     0.0  100.0
     CAF         Main    105          0    0.0    0.3     0.0   62.5
      readPrec   Main    109          1    0.0    0.6     0.0    0.6
      readPrec   Main    107          1    0.0    0.6     0.0    0.6
      main       Main    106          1    0.0   20.2     0.0   61.0
       ==        Main    114          1    0.0    0.0     0.0    0.0
       ==        Main    113          1    0.0    0.0     0.0    0.0
       showsPrec Main    112          2    0.0    1.2     0.0    1.2
       showsPrec Main    111          2    0.0    0.9     0.0    0.9
       readPrec  Main    110          0    0.0   18.8     0.0   18.8
       readPrec  Main    108          0    0.0   19.9     0.0   19.9

It's not possible to tell from the report which `==` took how long. This
patch adds one more column at the cost of making outputs wider. The
report now looks like this:

    COST CENTRE MODULE           SRC                       %time %alloc

    CAF         GHC.IO.Handle.FD <entire-module>             0.0   32.9
    CAF         GHC.IO.Encoding  <entire-module>             0.0    1.8
    CAF         GHC.Read         <entire-module>             0.0    1.0
    showsPrec   Main             Main_1.hs:7:19-22           0.0    1.2
    readPrec    Main             Main_1.hs:7:13-16           0.0   19.5
    readPrec    Main             Main_1.hs:4:13-16           0.0   20.5
    main        Main             Main_1.hs:(10,1)-(20,20)    0.0   20.2

                                                                       individual      inherited
    COST CENTRE  MODULE        SRC                      no. entries  %time %alloc   %time %alloc

    MAIN         MAIN          <built-in>                53      0    0.0    0.2     0.0  100.0
     CAF         Main          <entire-module>          105      0    0.0    0.3     0.0   62.5
      readPrec   Main          Main_1.hs:7:13-16        109      1    0.0    0.6     0.0    0.6
      readPrec   Main          Main_1.hs:4:13-16        107      1    0.0    0.6     0.0    0.6
      main       Main          Main_1.hs:(10,1)-(20,20) 106      1    0.0   20.2     0.0   61.0
       ==        Main          Main_1.hs:7:25-26        114      1    0.0    0.0     0.0    0.0
       ==        Main          Main_1.hs:4:25-26        113      1    0.0    0.0     0.0    0.0
       showsPrec Main          Main_1.hs:7:19-22        112      2    0.0    1.2     0.0    1.2
       showsPrec Main          Main_1.hs:4:19-22        111      2    0.0    0.9     0.0    0.9
       readPrec  Main          Main_1.hs:7:13-16        110      0    0.0   18.8     0.0   18.8
       readPrec  Main          Main_1.hs:4:13-16        108      0    0.0   19.9     0.0   19.9
     CAF         Text.Read.Lex <entire-module>          102      0    0.0    0.5     0.0    0.5

To fix failing test cases because of different orderings of cost centres
(e.g. optimized and non-optimized build printing in different order),
with this patch we also start sorting cost centres before printing. The
order depends on 1) entries (more entered cost centres come first) 2)
names (using strcmp() on cost centre names).

Reviewers: simonmar, austin, erikd, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11543, #8473, #7105

3 years agoLiteral: Remove unused hashLiteral function
Ömer Sinan Ağacan [Wed, 8 Jun 2016 12:16:53 +0000 (08:16 -0400)] 
Literal: Remove unused hashLiteral function

3 years agoReport term sizes with -v3 even when -ddump is enabled
Ömer Sinan Ağacan [Wed, 8 Jun 2016 11:02:29 +0000 (07:02 -0400)] 
Report term sizes with -v3 even when -ddump is enabled

This is the proper fix for the problem I tried solve with D2310
(committed as dd33245 and reverted in 44a3c18).

Reviewers: austin, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoRevert "Desugar: Display resulting program stats with -v2"
Ömer Sinan Ağacan [Wed, 8 Jun 2016 08:55:17 +0000 (04:55 -0400)] 
Revert "Desugar: Display resulting program stats with -v2"

This reverts commit dd33245922a9d363bdb8c34d00ed4d1574bc5285.

It seems like we already have `endPassIO` calls here, which should print
term sizes. For some reason they don't sometimes, and we need to
understand why instead of adding more prints.

3 years agoDesugar: Display resulting program stats with -v2
Ömer Sinan Ağacan [Wed, 8 Jun 2016 08:47:05 +0000 (04:47 -0400)] 
Desugar: Display resulting program stats with -v2

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision:

3 years agoAdd some determinism tests
Bartosz Nitka [Tue, 7 Jun 2016 20:04:22 +0000 (13:04 -0700)] 
Add some determinism tests

These are the tests that I accumulated fixing real issues.
Each test is a separate thing that was broken and they are
relatively small.

GHC Trac: #4012

3 years agoTestsuite Windows: mark T8308 expect_broken (#8308)
Thomas Miedema [Tue, 7 Jun 2016 19:13:34 +0000 (21:13 +0200)] 
Testsuite Windows: mark T8308 expect_broken (#8308)

3 years agoTestsuite driver: always quote opts.testdir
Thomas Miedema [Tue, 7 Jun 2016 13:59:15 +0000 (15:59 +0200)] 
Testsuite driver: always quote opts.testdir

This makes sure the testsuite keeps working when testdir contains
backward slashes.

Differential Revision:

3 years agoTypofix.
Edward Z. Yang [Tue, 7 Jun 2016 21:13:42 +0000 (14:13 -0700)] 

Signed-off-by: Edward Z. Yang <>
3 years agoUse pprUFM in pprStgLVs
Bartosz Nitka [Tue, 7 Jun 2016 15:43:58 +0000 (08:43 -0700)] 
Use pprUFM in pprStgLVs

3 years agoKill varSetElems
Bartosz Nitka [Tue, 7 Jun 2016 14:47:42 +0000 (07:47 -0700)] 
Kill varSetElems

This eradicates varSetElems from the codebase. This function
used to introduce nondeterminism.
I've also documented benign nondeterminism in three places.

GHC Trac: #4012

3 years agoMake vectInfoParallelVars a DVarSet
Bartosz Nitka [Tue, 7 Jun 2016 14:19:30 +0000 (07:19 -0700)] 
Make vectInfoParallelVars a DVarSet

We dump it in the interface file, so we need to do it in a
deterministic order. I haven't seen any problems with this
during my testing, but that's probably because it's unused.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoDocument determinism in pprintClosureCommand
Bartosz Nitka [Tue, 7 Jun 2016 14:33:45 +0000 (07:33 -0700)] 
Document determinism in pprintClosureCommand

Like described in the comment, it's OK here.

GHC Trac: #4012

3 years agoUse DVarSet in Vectorise.Exp
Bartosz Nitka [Tue, 7 Jun 2016 13:28:51 +0000 (06:28 -0700)] 
Use DVarSet in Vectorise.Exp

I believe this part of code is a bit unused. That's
probably why it never became a problem in my testing.
I'm changing to deterministic sets here to be safer.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoKill varSetElems in checkValidInferredKinds
Bartosz Nitka [Tue, 7 Jun 2016 13:53:14 +0000 (06:53 -0700)] 
Kill varSetElems in checkValidInferredKinds

It's only used for producing an error message here

GHC Trac: #4012

3 years agoFix build by removing unused import
Bartosz Nitka [Tue, 7 Jun 2016 13:41:12 +0000 (06:41 -0700)] 
Fix build by removing unused import

3 years agoKill two instances of uniqSetToList
Bartosz Nitka [Tue, 7 Jun 2016 12:36:43 +0000 (05:36 -0700)] 
Kill two instances of uniqSetToList

There should be no performance impact of switching to the
deterministic set here.

GHC Trac: #4012

3 years agoCoreToStg: Remove hand-written Eq instances of HowBound and LetInfo
Ömer Sinan Ağacan [Tue, 7 Jun 2016 13:15:22 +0000 (09:15 -0400)] 
CoreToStg: Remove hand-written Eq instances of HowBound and LetInfo

3 years agoUse a deterministic map for imp_dep_mods
Bartosz Nitka [Tue, 7 Jun 2016 12:55:50 +0000 (05:55 -0700)] 
Use a deterministic map for imp_dep_mods

This lets us remove some normalization and makes it
less brittle for the future.

Test Plan: ./validate

Reviewers: ezyang, austin, bgamari, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoKill occSetElts
Bartosz Nitka [Tue, 7 Jun 2016 12:23:32 +0000 (05:23 -0700)] 
Kill occSetElts

It uses uniqSetToList which is nondeterministic.

GHC Trac: #4012

3 years agoMerge MatchFixity and HsMatchContext
Alan Zimmerman [Tue, 24 May 2016 22:09:34 +0000 (00:09 +0200)] 
Merge MatchFixity and HsMatchContext

MatchFixity was introduced to facilitate use of API Annotations.

HsMatchContext does the same thing with more detail, but is chased
through all over the place to provide context when processing a Match.

Since we already have MatchFixity in the Match, it may as well provide
the full context.

updates submodule haddock

Test Plan: ./validate

Reviewers: austin, goldfire, bgamari

Subscribers: thomie, mpickering

Differential Revision:

GHC Trac Issues: #12105

(cherry picked from commit 306ecad591951521ac3f5888ca8be85bf749d271)

3 years agoMake UnitIdMap a deterministic map
Bartosz Nitka [Mon, 6 Jun 2016 15:54:17 +0000 (08:54 -0700)] 
Make UnitIdMap a deterministic map

This impacts at least the order in which version macros are
generated. It's pretty hard to track what kind of nondeterminism
is benign and this should have no performance impact as the number
of packages should be relatively small.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari, ezyang

Reviewed By: ezyang

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoKill foldUniqSet
Bartosz Nitka [Mon, 6 Jun 2016 15:15:43 +0000 (08:15 -0700)] 
Kill foldUniqSet

I planned to just say that we don't care about this part.
Turns out I was able to document away the uses in the codegenerator.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoDocument putDictionary determinism
Bartosz Nitka [Mon, 6 Jun 2016 14:38:03 +0000 (07:38 -0700)] 
Document putDictionary determinism

Summary: Like explained in the comment it's OK here.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoKill nameSetElems
Bartosz Nitka [Mon, 6 Jun 2016 13:53:25 +0000 (06:53 -0700)] 
Kill nameSetElems

nameSetElems used `eltsUFM` which is nondeterministic.

Test Plan: ./validate

Reviewers: simonmar, austin, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoDesugar ApplicativeDo and RecDo deterministically
Bartosz Nitka [Mon, 6 Jun 2016 13:08:54 +0000 (06:08 -0700)] 
Desugar ApplicativeDo and RecDo deterministically

This fixes a problem described in
Note [Deterministic ApplicativeDo and RecursiveDo desugaring].

Test Plan: ./validate + new testcase

Reviewers: simonpj, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoAdd @since annotations to base instances
Seraphime Kirkovski [Mon, 6 Jun 2016 10:29:38 +0000 (12:29 +0200)] 
Add @since annotations to base instances

Add @since annotations to instances in `base`.

Test Plan:
 * ./validate  # some commets shouldn't break the build
 * review the annotations for absurdities.

Reviewers: ekmett, goldfire, RyanGlScott, austin, hvr, bgamari

Reviewed By: RyanGlScott, hvr, bgamari

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #11767

3 years agoImplement deterministic CallInfoSet
Bartosz Nitka [Mon, 6 Jun 2016 11:36:21 +0000 (04:36 -0700)] 
Implement deterministic CallInfoSet

We need CallInfoSet to be deterministic because it determines the
order that the binds get generated.

Currently it's not deterministic because it's keyed on
`CallKey = [Maybe Type]` and `Ord CallKey` is implemented
with `cmpType` which is nondeterministic.

See Note [CallInfoSet determinism] for more details.

Test Plan: ./validate

Reviewers: simonpj, bgamari, austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoUse UniqDFM for HomePackageTable
Bartosz Nitka [Mon, 6 Jun 2016 09:10:07 +0000 (02:10 -0700)] 
Use UniqDFM for HomePackageTable

This isn't strictly necessary for deterministic ABIs.
The results of eltsHpt are consumed in two ways:
1) they determine the order of linking
2) if you track the data flow all the family instances get put in
   FamInstEnvs, so the nondeterministic order is forgotten.
3) same for VectInfo stuff
4) same for Annotations

The problem is that I haven't found a nice way to do 2. in
a local way and 1. is nice to have if we went for deterministic
object files. Besides these maps are keyed on ModuleNames so they
should be small relative to other things and the overhead should
be negligible.

As a bonus we also get more specific names.

Test Plan: ./validate

Reviewers: bgamari, austin, hvr, ezyang, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision:

GHC Trac Issues: #4012

3 years agoFailing test-case for #12135.
Edward Z. Yang [Sun, 5 Jun 2016 18:40:35 +0000 (11:40 -0700)] 
Failing test-case for #12135.

Signed-off-by: Edward Z. Yang <>
3 years agoBetter comment for orIfNotFound.
Edward Z. Yang [Mon, 16 May 2016 18:31:12 +0000 (11:31 -0700)] 
Better comment for orIfNotFound.

Signed-off-by: Edward Z. Yang <>
3 years agoTestsuite: fixup comments for T9872d [skip ci]
Thomas Miedema [Sun, 5 Jun 2016 11:29:34 +0000 (13:29 +0200)] 
Testsuite: fixup comments for T9872d [skip ci]

Resolve confusion resulting from:
6746549772c5cc0ac66c0fce562f297f4d4b80a2 (typo in 64 + 32 bit numbers)
ae86eb9f72fa7220fe47ac54d6d21395691c1308 (corrects 64 bit number)
1a8d61ca1a54820d2bc30c6a964312faf76d0635 (corrects 32 bit number)

3 years agoAdd relocation type R_X86_64_REX_GOTPCRELX
Tamar Christina [Sun, 5 Jun 2016 07:59:05 +0000 (09:59 +0200)] 
Add relocation type R_X86_64_REX_GOTPCRELX

Adding support for the `R_X86_64_REX_GOTPCRELX` relocation type.
This relocation is treated by the linker the same as the `R_X86_64_GOTPCRELX` type
`G + GOT + A - P` to generate relative offsets to the GOT.
The `REX` prefix has no influence in this stage.

This is based on

Test Plan: ./validate

Reviewers: erikd, austin, bgamari, simonmar

Reviewed By: erikd

Subscribers: thomie, #ghc_windows_task_force

Differential Revision:

GHC Trac Issues: #12147