ghc.git
3 years agorules/haddock: Set __HADDOCK_VERSION__
Ben Gamari [Thu, 12 Nov 2015 10:15:34 +0000 (11:15 +0100)] 
rules/haddock: Set __HADDOCK_VERSION__

Test Plan: Validate

Reviewers: austin, thomie

Reviewed By: thomie

Subscribers: kgardas, thomie

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

3 years agoChange demand information for foreign calls
Luite Stegeman [Thu, 12 Nov 2015 10:13:54 +0000 (11:13 +0100)] 
Change demand information for foreign calls

Foreign calls may not be strict for lifted arguments. Fixes Trac #11076.

Test Plan: ./validate

Reviewers: simonpj, bgamari, austin

Subscribers: thomie

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

GHC Trac Issues: #11076

3 years agoImplement function-sections for Haskell code, #8405
Simon Brenner [Thu, 12 Nov 2015 10:10:54 +0000 (11:10 +0100)] 
Implement function-sections for Haskell code, #8405

This adds a flag -split-sections that does similar things to
-split-objs, but using sections in single object files instead of
relying on the Satanic Splitter and other abominations. This is very
similar to the GCC flags -ffunction-sections and -fdata-sections.

The --gc-sections linker flag, which allows unused sections to actually
be removed, is added to all link commands (if the linker supports it) so
that space savings from having base compiled with sections can be
realized.

Supported both in LLVM and the native code-gen, in theory for all
architectures, but really tested on x86 only.

In the GHC build, a new SplitSections variable enables -split-sections
for relevant parts of the build.

Test Plan: validate with both settings of SplitSections

Reviewers: dterei, Phyx, austin, simonmar, thomie, bgamari

Reviewed By: simonmar, thomie, bgamari

Subscribers: hsyl20, erikd, kgardas, thomie

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

GHC Trac Issues: #8405

3 years agofix RTS Linker on platforms without SHN_XINDEX support
Karel Gardas [Wed, 11 Nov 2015 21:21:50 +0000 (22:21 +0100)] 
fix RTS Linker on platforms without SHN_XINDEX support

Summary:
This patch fixes RTS Linker compilation issues on platforms
where SHN_XINDEX is not defined. Tested on OpenBSD. When SHN_XINDEX
is not defined, the code reverts to the old behavior, that means
behavior of the Linker before D1357 which added SHN_XINDEX based
functionality.

Reviewers: bgamari, austin, erikd

Subscribers: thomie

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

3 years agoRemove redundant test.
Matthew Pickering [Wed, 11 Nov 2015 15:44:56 +0000 (15:44 +0000)] 
Remove redundant test.

ExportSyntaxImport will fail if this test would have ever failed.

3 years agoRename bundled pattern synonym tests to reflect new terminology
Matthew Pickering [Wed, 11 Nov 2015 15:37:43 +0000 (15:37 +0000)] 
Rename bundled pattern synonym tests to reflect new terminology

This also fixes a bug which causes intermittent test failures due to
interdependent tests.

3 years agomkGadtDecl no longer in P monad
Jan Stolarek [Wed, 11 Nov 2015 12:28:01 +0000 (13:28 +0100)] 
mkGadtDecl no longer in P monad

Since `mkGadtDecl` does not use any of the functions specific to the `P`
monad we can extract it from that monad and reuse in other parts of the
compiler.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, mpickering

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

3 years agonativeGen.PPC: Fix shift arith. right > 31 bits
Peter Trommler [Wed, 11 Nov 2015 11:32:19 +0000 (12:32 +0100)] 
nativeGen.PPC: Fix shift arith. right > 31 bits

Arithmetic right shifts of more than 31 bits set all bits to
the sign bit on PowerPC. iThe assembler does not allow shift
amounts larger than 32 so do an arithemetic right shift of 31
bit instead.

Fixes #10870

Test Plan: validate (especially on powerpc)

Reviewers: austin, erikd, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #10870

3 years agoDetect invalid foreign imports in bytecode compiler
Sylvain HENRY [Wed, 11 Nov 2015 11:32:08 +0000 (12:32 +0100)] 
Detect invalid foreign imports in bytecode compiler

The bytecode compiler doesn't handle every foreign import calling
convention. Instead of crashing during the generation of the foreign
call, we display an error.

Fix lint warnings

Test Plan: prog014 ghci test added

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #10462

3 years agoPut kind variables before type variables when specializing
Bartosz Nitka [Wed, 11 Nov 2015 11:31:55 +0000 (12:31 +0100)] 
Put kind variables before type variables when specializing

When you reverse the order of uniques you get the core lint
error from the testcase. The testcase is copied from
tests/simplCore/should_compile/T10689a.hs.

The problem is that we would put type and kind variables ordered by
unique order, which happened to be the right order for this testcase to
pass under normal conditions.

I think it's enough to sort them with `sortQuantVars`, but I'm not
really sure if some more sophisticated dependency analysis isn't needed.

Test Plan: added a new testcase

Reviewers: simonpj, goldfire, simonmar, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoImprove documentation of Data.List.lines:
Eric Mertens [Wed, 11 Nov 2015 11:31:45 +0000 (12:31 +0100)] 
Improve documentation of Data.List.lines:

- Document behavior on some inputs.
- Add some examples.

Reviewers: bgamari, osa1, hvr, dolio, #core_libraries_committee,
nomeata, austin

Reviewed By: bgamari, dolio, #core_libraries_committee, nomeata, austin

Subscribers: dolio, glguy, nomeata, thomie

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

3 years agoSystools: read ELF section without calling readelf
Sylvain HENRY [Wed, 11 Nov 2015 11:31:31 +0000 (12:31 +0100)] 
Systools: read ELF section without calling readelf

This patch tackles two issues:

1) GHC stores a "link info" string into a ELF section. Initially a
section with type "note" was used but GHC didn't follow the ELF
specification which specifies a record-based format for these sections.
With D1375 we switched to a "progbits" section type for which there
isn't any format constraint. This is an issue for D1242 which use GCC's
--gc-sections which collects "unused" sections, such as our section
containing link info... In this patch, we fall back to a section with
type "note" but we respect the specified format.

2) Reading back the ELF section was done by parsing the result of a
call to "readelf". Calling readelf is problematic because the program
may not be available or it may be renamed on some platforms (see
D1326). Moreover we have no garanty that its output layout will stay
the same in future releases of readelf. Finally we would need to fix
the parsing to support  "note" sections because of 1. Instead, this
patch proposes to use Data.Binary.Get to directly read the "link info"
note into its section. ELF has a specification, hence it should work on
every conforming platform.

This patch "reverts" D1375, hence it supersedes D1432. It makes D1326
not necessary anymore.

Test Plan:
- recomp011 should pass (test that relinking is avoided when both "link
info" match)
- we should add a test for ELF objects with more than 0xff00 sections
=> added test "recomp015"
- we should check that GAS generates 32-bit words with .int on every
supported platform using ELF (or find a place where this is
documented). harbomaster and I (@hsyl20) only tested on x86-64. On
platforms where it is not true, it should make recomp011 fail. =>
tested to work on Linux/amd64, Solaris/i386 and OpenBSD/amd64

Reviewers: olsner, ony, thomie, kgardas, austin, bgamari

Reviewed By: thomie, bgamari

Subscribers: kgardas, rwbarton, thomie

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

GHC Trac Issues: #10974, #11022

3 years agoRemove fun_infix from Funbind, as it is now in Match
Alan Zimmerman [Wed, 11 Nov 2015 11:03:18 +0000 (12:03 +0100)] 
Remove fun_infix from Funbind, as it is now in Match

One of the changes D538 introduced is to add `m_fun_id_infix` to `Match`

```lang=hs
data Match id body
  = Match {
        m_fun_id_infix :: (Maybe (Located id,Bool)),
          -- fun_id and fun_infix for functions with multiple equations
          -- only present for a RdrName. See note [fun_id in Match]
        m_pats :: [LPat id], -- The patterns
        m_type :: (Maybe (LHsType id)),
                                 -- A type signature for the result of the match
                                 -- Nothing after typechecking
        m_grhss :: (GRHSs id body)
  } deriving (Typeable)
```

This was done to track the individual locations and fixity of the
`fun_id` for each of the defining equations for a function when there
are more than one.

For example, the function `(&&&)` is defined with some prefix and some
infix equations below.

```lang=hs
    (&&&  ) [] [] =  []
    xs    &&&   [] =  xs
    (  &&&  ) [] ys =  ys
```

This means that the fun_infix is now superfluous in the `FunBind`. This
has not been removed as a potentially risky change just before 7.10 RC2,
and so must be done after.

This ticket captures that task, which includes processing these fields
through the renamer and beyond.

Ticket #9988 introduced these fields into `Match` through renaming, this
ticket it to continue through type checking and then remove it from
`FunBind` completely.

The split happened so that #9988 could land in 7.10

Trac ticket : #10061

Test Plan: ./validate

Reviewers: goldfire, austin, simonpj, bgamari

Reviewed By: bgamari

Subscribers: simonpj, thomie, mpickering

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

GHC Trac Issues: #10061

3 years agoRemove unused field in ConDecl
Jan Stolarek [Wed, 11 Nov 2015 10:34:48 +0000 (11:34 +0100)] 
Remove unused field in ConDecl

We no longer parse old-style GADT syntax but there was some left-over
code for emitting deprecation warnings.

Updates haddock submodule.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoOPTIONS_GHC compiler flags may contain spaces (#4931)
Thomas Miedema [Wed, 11 Nov 2015 10:05:16 +0000 (11:05 +0100)] 
OPTIONS_GHC compiler flags may contain spaces (#4931)

When a .hsc contains `#define FOO "bar baz"`, hsc2hs emits:

    {-# OPTIONS_GHC -optc-DFOO="bar baz" #-}

Make sure GHC can compile this, by tweaking `HeaderInfo.getOptions` a
bit.

Test Plan: driver/T4931

Reviewers: austin, bgamari

Reviewed By: bgamari

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

GHC Trac Issues: #4931

3 years agoFix link in documentation
Siddhanathan Shanmugam [Wed, 11 Nov 2015 09:55:33 +0000 (10:55 +0100)] 
Fix link in documentation

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: mpickering, thomie

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

3 years agoAssociate pattern synonyms with types in module exports
Matthew Pickering [Wed, 11 Nov 2015 09:49:44 +0000 (10:49 +0100)] 
Associate pattern synonyms with types in module exports

This patch implements #10653.

It adds the ability to bundle pattern synonyms with type constructors in
export lists so that users can treat pattern synonyms more like data
constructors.

Updates haddock submodule.

Test Plan: ./validate

Reviewers: goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: simonpj, gridaphobe, thomie

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

GHC Trac Issues: #10653

3 years agoAbstract TFs can have injectivity information
Jan Stolarek [Mon, 9 Nov 2015 14:44:47 +0000 (15:44 +0100)] 
Abstract TFs can have injectivity information

Summary:
For abstract type families we incorrectly rejected their injectivity
annotation.  Fixes #11007.

Test Plan: #6018

Reviewers: goldfire, austin, bgamari

Subscribers: thomie

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

GHC Trac Issues: #11007

3 years agoFix sporadic failing ghci/Linker/Dyn tests
Tamar Christina [Sun, 8 Nov 2015 13:21:30 +0000 (14:21 +0100)] 
Fix sporadic failing ghci/Linker/Dyn tests

Summary:
Multiple tests use the same source C file.
GHC was previously writing the resulting .o files
in the same folder as the source. When these tests
are run in parallel, sometimes one of the calls would
use the partial .o file and throw an error.

The .o files are moved into different folders with this
change.

Test Plan: make test -C testsuite/tests/ghci/linking/dyn

Reviewers: thomie, austin, bgamari

Reviewed By: bgamari

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

3 years agoAdd OpenBSD specific RTS symbols
Karel Gardas [Sat, 7 Nov 2015 23:21:36 +0000 (00:21 +0100)] 
Add OpenBSD specific RTS symbols

This patch adds OpenBSD specific RTS symbols.  The patch is taken from
the OpenBSD ports tree, provided by the OpenBSD community.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoQuote file paths in linker scripts
Ben Gamari [Sat, 7 Nov 2015 23:21:19 +0000 (00:21 +0100)] 
Quote file paths in linker scripts

Reviewers: bgamari, austin

Reviewed By: austin

Subscribers: thomie

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

GHC Trac Issues: #11063

3 years agoAdd pprSTrace for debugging with call stacks
Bartosz Nitka [Sat, 7 Nov 2015 23:21:11 +0000 (00:21 +0100)] 
Add pprSTrace for debugging with call stacks

I've spent quite a bit of time giving unique labels to my `pprTrace`
calls and then trying to intuit where the function is called from.
Thanks to the new implicit parameter CallStack functionality I don't
have to do that anymore.

Test Plan: harbormaster

Reviewers: austin, simonmar, bgamari

Reviewed By: simonmar, bgamari

Subscribers: thomie

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

3 years agoReplace freeVarsOf scrut with scrut_fvs to avoid repetition
Bartosz Nitka [Sat, 7 Nov 2015 23:20:34 +0000 (00:20 +0100)] 
Replace freeVarsOf scrut with scrut_fvs to avoid repetition

Test Plan: harbormaster

Reviewers: bgamari, simonmar, austin

Reviewed By: austin

Subscribers: thomie

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

3 years agominor: use unless instead of (when . not)
Ömer Sinan Ağacan [Sat, 7 Nov 2015 23:20:26 +0000 (00:20 +0100)] 
minor: use unless instead of (when . not)

Reviewers: bgamari, austin

Reviewed By: austin

Subscribers: thomie

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

3 years agoParser: allow empty multi-line deprecation warnings
Thomas Miedema [Sat, 7 Nov 2015 23:20:15 +0000 (00:20 +0100)] 
Parser: allow empty multi-line deprecation warnings

This should work,

    {-# DEPRECATED someFunction [] #-}

Test Plan: parser/should_compile/T3303

Reviewers: bgamari, austin

Reviewed By: austin

Subscribers: mpickering

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

GHC Trac Issues: #11044

3 years agoBuild system: use stage0 to build dll-split
Thomas Miedema [Sat, 7 Nov 2015 23:19:55 +0000 (00:19 +0100)] 
Build system: use stage0 to build dll-split

When cross-compiling ghc itself, this prevents:

  "dll-split: cannot execute binary file: Exec format error"

Test Plan:
   * ./configure --target=arm-linux-gnueabihf
   * DYNAMIC_GHC_PROGRAMS=YES
   * Stage1Only=NO

Reviewers: rwbarton, bgamari, austin

Reviewed By: austin

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

3 years agoRemove PatSynBuilderId
Matthew Pickering [Sat, 7 Nov 2015 23:46:03 +0000 (23:46 +0000)] 
Remove PatSynBuilderId

Summary:
It was only used to pass field labels between the typechecker and
desugarer. Instead we add an extra field the RecordCon to carry this
information.

Reviewers: austin, goldfire, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #11057

3 years agofix #10734 by adding braces to pretty-printing of let inside do
John Leo [Sat, 7 Nov 2015 22:28:37 +0000 (17:28 -0500)] 
fix #10734 by adding braces to pretty-printing of let inside do

Test Plan: validate

Reviewers: bgamari, austin, goldfire

Reviewed By: goldfire

Subscribers: thomie

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

GHC Trac Issues: #10734

3 years agoAllow the GHCi Linker to resolve related dependencies when loading DLLs
Tamar Christina [Sat, 7 Nov 2015 08:51:43 +0000 (03:51 -0500)] 
Allow the GHCi Linker to resolve related dependencies when loading DLLs

Summary:
GHCi does not correctly tell the Windows Loader how to handle dependencies to DLL's
that are not on the standard Windows load path:

1. The directory from which the application loaded.
2. The current directory.
3. The system directory. Use the GetSystemDirectory function to get the path of this directory.
4. The 16-bit system directory. There is no function that obtains the path of this directory,
   but it is searched.
5. The Windows directory. Use the GetWindowsDirectory function to get the path of this directory.
6. The directories that are listed in the PATH environment variable.
   Note that this does not include the per-application path specified by the
   AppPaths registry key. The App Paths key is not used when computing the DLL search path.

So what this means is given two DLLs `A` and `B` and `B` depending on `A`.
If we put both DLLs into a new folder bin and then call GHC with:

`ghc -L$(PWD)/bin -lB`

the loading will fail as the Windows loader will try to load the dependency of `B` and fail
since it cannot find `A`.

*IMPORTANT* this patch drops XP Support.
The  APIs being used were natively added to Windows 8+ and backported to Windows 7 and Vista
via a mandatory security patch (in 2011). This means that there is a chance that KB2533623 has
not been installed on certain machines. For those machines I display a warning and
temporarily expand the `PATH` to allow it to load.

This patch will make sure that paths provided by the user with `-L` *and* the folder in which a
DLL is found are added to the search path. It does so using one of two methods depending upon how
new of a Windows version we are running on:

- If the APIs are available it will use `addDllDirectory` and `removeDllDirectory`.
   The order of which these directories are searched is nondeterministic.
- If the APIs are not available it means that we're running on a pretty old unpatched machine.
  But if it's being used in an environment with no internet access it may be the case.
  So if the APIs are not available we temporarily extend the `PATH` with the directories.
  A warning is also displayed to the user informing them that the linking may fail,
  and if it does, install the needed patch. The `PATH` variable has limitations.

Test Plan:
./validate

Added two new test T10955 and T10955dyn

Reviewers: erikd, bgamari, thomie, hvr, austin

Reviewed By: erikd, thomie

Subscribers: #ghc_windows_task_force

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

GHC Trac Issues: #10955

3 years agoMake GHCi & TH work when the compiler is built with -prof
Simon Marlow [Sat, 7 Nov 2015 09:39:05 +0000 (09:39 +0000)] 
Make GHCi & TH work when the compiler is built with -prof

Summary:
Amazingly, there were zero changes to the byte code generator and very
few changes to the interpreter - mainly because we've used good
abstractions that hide the differences between profiling and
non-profiling.  So that bit was pleasantly straightforward, but there
were a pile of other wibbles to get the whole test suite through.

Note that a compiler built with -prof is now like one built with
-dynamic, in that to use TH you have to build the code the same way.
For dynamic, we automatically enable -dynamic-too when TH is required,
but we don't have anything equivalent for profiling, so you have to
explicitly use -prof when building code that uses TH with a profiled
compiler.  For this reason Cabal won't work with TH.  We don't expect
to ship a profiled compiler, so I think that's OK.

Test Plan: validate with GhcProfiled=YES in validate.mk

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

Reviewed By: ezyang

Subscribers: thomie

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

GHC Trac Issues: #4837, #545

3 years agoCall Arity: In "e x", the result of "x" is not shared
Joachim Breitner [Fri, 6 Nov 2015 13:04:08 +0000 (14:04 +0100)] 
Call Arity: In "e x", the result of "x" is not shared

in contrast to "e (f x)", where CorePrep will turn it into "let y = f x
in e x". So in
  let f = ...
  in e (f x)
we know that f is called at most once, but in
  let f = ...
  in e f
we do not know that.

Previously Call Arity would assume that in "e x", "x" is evaluated at
most once. This rarely would make a difference (the argument "x" is
analized with an incoming arity of 0, so no eta-expansion would be done
anyways), but of course this should still be fixed.

This fixes #11064.

Note the corresponding code dmdTransformThunkDmd in DmdAnal.

3 years agoLinker: #ifdef cleanup
Erik de Castro Lopo [Tue, 3 Nov 2015 06:10:12 +0000 (17:10 +1100)] 
Linker: #ifdef cleanup

Test Plan:
 - Run tests on x86_64/linux and powerpc/linux
 - Cross compile rts/Linker.c with the i686-w64-mingw32-gcc and
   x86_64-w64-mingw32-gcc Linux to Windows cross-compilers.

Reviewers: bgamari, austin, hvr, Phyx

Subscribers: thomie

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

3 years agoUse full name of LLVM program in error message
Erik de Castro Lopo [Mon, 2 Nov 2015 00:45:14 +0000 (11:45 +1100)] 
Use full name of LLVM program in error message

Previously something like `/usr/bin/opt-3.7` was being shortened to
`opt-3` using the `takeBaseName` function. This shortened form is
actually not correct. We should use `takeFileName` instead.

Reviewers: bgamari, austin, hvr

Subscribers: thomie

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

3 years agoTweak settings for LLVM tests
Erik de Castro Lopo [Mon, 2 Nov 2015 07:14:08 +0000 (18:14 +1100)] 
Tweak settings for LLVM tests

* The LLVM backend does not currently work on PowerPC so disable it.
* Only run LLVM tests if the needed LLVM tools have been detected at
  configure time.

Test Plan: Run LLVM tests on x86_64 and powerpc

Reviewers: austin, bgamari, hvr, thomie

Subscribers: thomie

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

3 years agoCabal-level sanity check to enforce Cabal flag-invariant
Herbert Valerio Riedel [Tue, 3 Nov 2015 22:18:30 +0000 (16:18 -0600)] 
Cabal-level sanity check to enforce Cabal flag-invariant

This helps catch cabal-flag misconfiguration early on during `cabal
configure`, rather than much later in the build-process during
compilation.

Reviewed By: austin

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

3 years agoBuild system: renable -Wall on validate (base)
Thomas Miedema [Tue, 3 Nov 2015 22:17:35 +0000 (16:17 -0600)] 
Build system: renable -Wall on validate (base)

Problem: 'SRC_HC_OPTS += -Wall' in 'mk/warnings.mk' was getting
overwritten by 'SRC_HC_OPTS = ...' in 'mk/flavours/*.mk'.

It didn't affect the compiler or most other libraries, because most
.cabal files define 'ghc-options: -Wall'.

Bug introduced in commit
2c24fd707f8650205bb574ffac5f376239af3723, when moving validate settings
from 'mk/validate-settings.mk' to 'mk/flavours/validate.mk'.

Reviewed By: austin

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

3 years agorts/Hash: Constify HashTable* in lookupHashTable
Ben Gamari [Tue, 3 Nov 2015 22:16:27 +0000 (16:16 -0600)] 
rts/Hash: Constify HashTable* in lookupHashTable

This seems like an obvious place to apply `const`

Reviewed By: simonmar, austin

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

3 years agoAdd `MonadPlus IO` and `Alternative IO` instances
Herbert Valerio Riedel [Tue, 3 Nov 2015 22:12:18 +0000 (16:12 -0600)] 
Add `MonadPlus IO` and `Alternative IO` instances

This requires adding a new primitive `mplusIO` to `GHC.IO`

Update transformers submodule to accomodate extant orphan instances.

Reviewed By: austin, bgamari

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

GHC Trac Issues: #10755

3 years agobase: Add new Control.Monad.Fail module (re #10751)
Herbert Valerio Riedel [Tue, 3 Nov 2015 21:40:52 +0000 (22:40 +0100)] 
base: Add new Control.Monad.Fail module (re #10751)

This is based on David's initial patch augmented by more extensive
Haddock comments.

This has been broken out of D1248 to reduce its size
by splitting the patch into smaller logical pieces.

On its own, this new module does nothing interesting yet.
Later patches will add support for a different desugaring of
`do`-blocks, at which point the new `MonadFail` class will
become more useful.

Reviewed By: ekmett, austin

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

3 years agobase: Add changelog entry for 4.8.2.0
Ben Gamari [Mon, 2 Nov 2015 16:14:52 +0000 (17:14 +0100)] 
base: Add changelog entry for 4.8.2.0

3 years agobase: GHC.RTS.Flags symbols really were introduced in 4.8.2
Ben Gamari [Mon, 2 Nov 2015 16:13:30 +0000 (17:13 +0100)] 
base: GHC.RTS.Flags symbols really were introduced in 4.8.2

3 years agobase: Update `@since 4.8.2` annotations (re #11026)
Herbert Valerio Riedel [Mon, 2 Nov 2015 14:39:28 +0000 (15:39 +0100)] 
base: Update `@since 4.8.2` annotations (re #11026)

This missed to perform in f8ba4b55cc3a061458f5cfabf17de96128defbbb

3 years agoUpdate filepath submodule for proper version
Herbert Valerio Riedel [Mon, 2 Nov 2015 12:13:28 +0000 (13:13 +0100)] 
Update filepath submodule for proper version

This pulls in a minor version bump to v1.4.1, this way
GHC HEAD nightly builds report a proper version number.

3 years agoget rid of Elf32/Elf64_Section as this is a non-portable Linux-ism.
Karel Gardas [Sun, 1 Nov 2015 21:10:15 +0000 (22:10 +0100)] 
get rid of Elf32/Elf64_Section as this is a non-portable Linux-ism.

Summary:
D1357 introduces usage of Elf32_Section/Elf64_Section in RTS linker
code. Unfortunately this is a non-portable Linux-ism and such types are not
defined anywhere except the Linux-land probably. I've checked Solaris 11.2,
Solaris 11.3, FreeBSD 10.1, NetBSD 6.1.5 and OpenBSD current. The fix
is easy to use `unsigned short' as this is also an underlying type
of those Elf*_Section defines in Linux.

Reviewers: olsner, austin, bgamari, erikd

Subscribers: thomie

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

3 years agoUpdate process submodule to process-1.4 release
Herbert Valerio Riedel [Mon, 2 Nov 2015 06:41:16 +0000 (07:41 +0100)] 
Update process submodule to process-1.4 release

We already used a process-1.4 snapshot with non-bumped version,
so this commit is mostly a `.cabal` file upper-bound relaxation change.

3 years agorts: Produce stack trace on fatal error
Ben Gamari [Sun, 1 Nov 2015 21:53:17 +0000 (22:53 +0100)] 
rts: Produce stack trace on fatal error

Test Plan: Validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: simonmar, thomie, scpmw

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

3 years agoEventLog: Loop fwrite if necessary during flush
Ben Gamari [Sun, 1 Nov 2015 18:06:09 +0000 (19:06 +0100)] 
EventLog: Loop fwrite if necessary during flush

Previously the eventlog flush code would fail if `fwrite` wrote less
than the requested amount. Like all Unix stream I/O operations, however,
`fwrite` isn't guaranteed to write the entire buffer. Here we loop as
long as `fwrite` succeeds in writing anything.

Fixes #11041.

Test Plan: Validate with eventlog

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #11041

3 years agoChange sphinx for documentation building on windows to the python3 version
Tamar Christina [Sun, 1 Nov 2015 18:26:16 +0000 (19:26 +0100)] 
Change sphinx for documentation building on windows to the python3 version

Summary:
Python 3 seems to have fixed the long standing codepage issue with
python on Windows. To be able to reliably build the documentation
we should use the Python 3 version of Sphinx.

See `https://docs.python.org/dev/whatsnew/3.3.html#codecs` and
`https://bugs.python.org/issue13216`. Sphinx also supports Python 3.

Oddly enough `python3-sphinx` is registered as `sphinx-build.exe`
instead of `sphinx-build3.exe`, so the changes in `configure.ac` can
be reverted.

install with `pacman -S mingw-w64-$(uname -m)-python3-sphinx`

Test Plan: ./validate

Reviewers: austin, thomie, bgamari

Reviewed By: bgamari

Subscribers: erikd

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

GHC Trac Issues: #11021

3 years agoMinor simplification in unariser pass:
Ömer Sinan Ağacan [Sun, 1 Nov 2015 16:14:58 +0000 (17:14 +0100)] 
Minor simplification in unariser pass:

We don't need to update StgCase's AltType, because it's already set
correctly in `CoreToStg.mkStgAltType`, so we can just remove extra
argument passing and return values.

(I think this is a useful refactoring because it makes it clear that we
don't need to update AltTypes)

Reviewers: austin, bgamari, simonpj

Reviewed By: bgamari, simonpj

Subscribers: simonpj, thomie

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

3 years agoLibdw: Fix symbol naming
Ben Gamari [Sun, 1 Nov 2015 11:33:08 +0000 (12:33 +0100)] 
Libdw: Fix symbol naming

RTS convention is to use camel-case.

3 years agoDwarf.Constants: Introduce Haddock sections
Ben Gamari [Fri, 30 Oct 2015 20:22:17 +0000 (21:22 +0100)] 
Dwarf.Constants: Introduce Haddock sections

3 years agoLibdw: Remove special treatment for stg_stop_thread
Ben Gamari [Sat, 5 Sep 2015 11:51:27 +0000 (13:51 +0200)] 
Libdw: Remove special treatment for stg_stop_thread

This is no longer necessary since this symbol can be unwound through
with its DWARF information.

3 years agoStgStartup: Setup unwinding for stg_stop_thread
Ben Gamari [Sun, 30 Aug 2015 12:11:56 +0000 (14:11 +0200)] 
StgStartup: Setup unwinding for stg_stop_thread

This is a bit ugly as we need to assume the structure of the C stack as
left by StgRun. Nevertheless, it allows us to unwind all the way back to
`_start` on my machine.

```
Stack trace:
    set_initial_registers (rts/Libdw.c:272.0)
    dwfl_thread_getframes

    dwfl_getthreads
    dwfl_getthread_frames
    libdw_get_backtrace (rts/Libdw.c:243.0)
    base_GHCziExecutionStack_getStackTrace1_info
(libraries/base/GHC/ExecutionStack.hs:43.1)
    base_GHCziExecutionStack_showStackTrace1_info
(libraries/base/GHC/ExecutionStack.hs:47.1)
    base_GHCziBase_bindIO1_info (libraries/base/GHC/Base.hs:1085.1)
    base_GHCziBase_thenIO1_info (libraries/base/GHC/Base.hs:1088.1)
    base_GHCziBase_thenIO1_info (libraries/base/GHC/Base.hs:1088.1)
    base_GHCziBase_thenIO1_info (libraries/base/GHC/Base.hs:1088.1)
    base_GHCziBase_thenIO1_info (libraries/base/GHC/Base.hs:1088.1)
    base_GHCziBase_thenIO1_info (libraries/base/GHC/Base.hs:1088.1)
    stg_catch_frame_info (rts/Exception.cmm:370.1)
    stg_stop_thread_info (rts/StgStartup.cmm:42.1)
    scheduleWaitThread (rts/Schedule.c:465.0)
    hs_main (rts/RtsMain.c:65.0)

    __libc_start_main (/tmp/buildd/glibc-2.19/csu/libc-start.c:321.0)
    _start
```

3 years agocmm: Expose machine's stack and return address register
Ben Gamari [Wed, 26 Aug 2015 22:36:59 +0000 (00:36 +0200)] 
cmm: Expose machine's stack and return address register

We will need to use these to setup proper unwinding information for the
stg_stop_thread closure. This pokes a hole in the STG abstraction,
exposing the machine's stack pointer register so that we can accomplish
this. We also expose a dummy return address register, which corresponds
to the register used to hold the DWARF return address.

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

3 years agoDwarf.Types: Fix comment style
Ben Gamari [Fri, 30 Oct 2015 20:02:07 +0000 (21:02 +0100)] 
Dwarf.Types: Fix comment style

3 years agoDwarf: Preserve stack pointer register
Ben Gamari [Fri, 30 Oct 2015 19:49:35 +0000 (20:49 +0100)] 
Dwarf: Preserve stack pointer register

Here we add a `same_value $sp` instruction to our default unwinding
rules to ensure that the implicit `$sp = CFA` rule (which `libdw`
appears to exhibit on x86_64) doesn't overwrite it (necessary since we
don't use $sp to track our call stack).

See Phab Diff D1189 for details on how we arrived at this resolution.

Reviewers: scpmw, austin, simonmar

Reviewed By: austin, simonmar

Subscribers: thomie, simonmar

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

3 years agoUpdate Cabal submodule
Herbert Valerio Riedel [Sun, 1 Nov 2015 13:03:44 +0000 (14:03 +0100)] 
Update Cabal submodule

This allows us to remove 4 newly added language pragmas from the T4437
test-case as they were recently added to Cabal 1.23

3 years agoDynFlags: -freverse-errors should be defFlag
Ben Gamari [Sun, 1 Nov 2015 11:28:10 +0000 (12:28 +0100)] 
DynFlags: -freverse-errors should be defFlag

This flag works under both GHC and GHCi, as pointed out on D1367. Thanks
to @thomie for pointing this out.

3 years agokeepCAFsForGHCi was broken
Simon Marlow [Sun, 1 Nov 2015 11:25:39 +0000 (12:25 +0100)] 
keepCAFsForGHCi was broken

Buggy Makefile code meant it was always included, instead of being
included only for the dyn ways.

Test Plan: validate

Reviewers: hvr, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoApiAnnotations: BooleanFormula is not properly Located
Alan Zimmerman [Sun, 1 Nov 2015 10:13:21 +0000 (11:13 +0100)] 
ApiAnnotations: BooleanFormula is not properly Located

At the moment BooleanFormula is defined as

  data BooleanFormula a = Var a | And [BooleanFormula a]
                        | Or [BooleanFormula a]
       deriving (Eq, Data, Typeable, Functor, Foldable, Traversable)

An API Annotation can only be attached to an item of the form Located a.

Replace this with a properly Located version, and attach the appropriate
API Annotations to it

Updates haddock submodule.

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, mpickering

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

GHC Trac Issues: #11017

3 years agoBump ghc-prim version to 0.5.0.0 (closes #11043)
Herbert Valerio Riedel [Sun, 1 Nov 2015 11:38:42 +0000 (12:38 +0100)] 
Bump ghc-prim version to 0.5.0.0 (closes #11043)

This also needs to update the primitive/vector submodules in order to
relax upper bounds on ghc-prim.

Like in f8ba4b55cc3a061458f5cfabf17de96128defbbb, a mass-rewrite in testsuite/ via

  sed -i s,ghc-prim-0.4.0.0,ghc-prim-0.5.0.0,g $(git grep -Fl 'ghc-prim-0.4.0.0')

was performed.

3 years agoghc-prim: add API delta as changelog (re #11043)
Herbert Valerio Riedel [Sun, 1 Nov 2015 11:34:56 +0000 (12:34 +0100)] 
ghc-prim: add API delta as changelog (re #11043)

[skip ci]

3 years agoBump `base` version to 4.9.0.0 (closes #11026)
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:54:32 +0000 (10:54 +0100)] 
Bump `base` version to 4.9.0.0 (closes #11026)

This also relaxes a few upper bounds on base in the ghc.git repo;

This required a mass-rewrite in testsuite/

  sed -i s,base-4.8.2.0,base-4.9.0.0,g $(git grep -Fl 'base-4.8.2.0')

because it turns out the testsuite is still sensitive to package version
changes.

3 years agoUpdate hoopl submodule
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:49:00 +0000 (10:49 +0100)] 
Update hoopl submodule

This is needed to prepare for #11026 as this update
relaxes the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agoUpdate unix submodule
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:36:33 +0000 (10:36 +0100)] 
Update unix submodule

This is needed to prepare for #11026 as this update
relaxes the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agoUpdate process submodule
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:32:31 +0000 (10:32 +0100)] 
Update process submodule

This is needed to prepare for #11026 as this update
relaxes the upper bounds on `base` to allow for `base-4.9.0.0`

This also needs to relax a few upper bounds on process in some cabal files

(there will be another process submodule update soon, as a major
version bump of process' version is still pending)

3 years agoUpdate filepath submodule
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:21:15 +0000 (10:21 +0100)] 
Update filepath submodule

This is needed to prepare for #11026 as this update
relaxes the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agoUpdate directory submodule
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:13:01 +0000 (10:13 +0100)] 
Update directory submodule

This is needed to prepare for #11026 as this update
relaxes the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agoUpdate array/stm/hpc/haddock submodules
Herbert Valerio Riedel [Sun, 1 Nov 2015 09:35:02 +0000 (10:35 +0100)] 
Update array/stm/hpc/haddock submodules

This is needed to prepare for #11026 as these updates
relax the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agoghc-prim: Fix hs_ctz64 for powerpc
Erik de Castro Lopo [Sun, 1 Nov 2015 09:19:23 +0000 (10:19 +0100)] 
ghc-prim: Fix hs_ctz64 for powerpc

Test Plan: Test on powerpc/linux

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoLinker: More uint64_t to uintptr_t fixes
Erik de Castro Lopo [Sun, 1 Nov 2015 09:19:15 +0000 (10:19 +0100)] 
Linker: More uint64_t to uintptr_t fixes

Need to use `uintptr_t` on PowerPC and possibly other 32 bit
architectures.

Test Plan: Validate on x86_64 and powerpc Linux

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoEnforce linkage with pthread library on OpenBSD
Karel Gardas [Sun, 1 Nov 2015 09:18:55 +0000 (10:18 +0100)] 
Enforce linkage with pthread library on OpenBSD

This patch enforces linkage with pthread library on OpenBSD. This is
done in order to avoid linker errors when linking with libffi which
requires POSIX threading but itself is not linked with libpthread
directly. So client binaries (of libffi) needs to link against
libpthread explicitly

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, erikd

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

3 years agorts/posix: Reduce heap allocation amount on mmap failure
Ben Gamari [Sun, 1 Nov 2015 09:18:41 +0000 (10:18 +0100)] 
rts/posix: Reduce heap allocation amount on mmap failure

Since the two-step allocator the RTS asks the kernel for a large upfront
mmap'd region of memory (on the order of terabytes). While we have no
expectation that this entire region will be backed by physical memory,
this scheme nevertheless fails on some systems with resource limits.
Here we use a back-off scheme to reduce our allocation request until we
find a size agreeable to the kernel. Fixes #10877.

This also fixes a latent bug wherein the heap reservation retry logic
would fail to free the previously reserved address space, which would
likely result in a heap allocation failure.

Test Plan:
set address space limit with `ulimit -v 67108864` and try running
a compiled program

Reviewers: simonmar, austin

Reviewed By: simonmar

Subscribers: thomie, RyanGlScott

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

GHC Trac Issues: #10877

3 years agoProvide a utility to check API Annotations docs
Alan Zimmerman [Sun, 1 Nov 2015 09:18:25 +0000 (10:18 +0100)] 
Provide a utility to check API Annotations docs

A utility to check API Annotations was provided in
https://git.haskell.org/ghc.git/commitdiff/43751b2436f370d956d8021b3cdd3
eb77801470b

This commit had poor documentation.

This patch improves the output generated by the utility as well as
supplying better documentation

Test Plan: ./validate

Reviewers: simonpj, austin, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie, mpickering

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

GHC Trac Issues: #10917

3 years agoApply WERROR only to stage2 HC options
Ben Gamari [Sun, 1 Nov 2015 09:18:07 +0000 (10:18 +0100)] 
Apply WERROR only to stage2 HC options

Otherwise validate unnecessarily may fail during the stage1 build when
booting with an older compiler.

Test Plan: Try it

Reviewers: thomie, austin

Reviewed By: thomie, austin

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

3 years agoAdd rts/Linker support for more than 64k sections
Simon Brenner [Sun, 1 Nov 2015 09:15:31 +0000 (10:15 +0100)] 
Add rts/Linker support for more than 64k sections

Since some ELF fields ran out of range to represent that many sections,
they've been extended with magic numbers that indicate that the full
value is stored in another field.

This will be necessary for GHCi with -split-sections on ELF platforms
that don't use GNU ld.

Reviewers: austin, bgamari, simonmar, erikd

Reviewed By: bgamari, simonmar, erikd

Subscribers: thomie

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

GHC Trac Issues: #8405

3 years agollvmGen: Really fix build with Clang
Erik de Castro Lopo [Sun, 1 Nov 2015 09:15:24 +0000 (10:15 +0100)] 
llvmGen: Really fix build with Clang

Test Plan: Build with Clang and GCC

Reviewers: austin, thomie, hvr, bgamari

Reviewed By: bgamari

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

3 years agollvmGen: Fix build with Clang
Erik de Castro Lopo [Sat, 31 Oct 2015 23:11:02 +0000 (00:11 +0100)] 
llvmGen: Fix build with Clang

Another weird case of Clang not accepting whitespace in CPP that
GCC accepts without a problem.

Test Plan: Build with Clang and GCC

Reviewers: austin, thomie, hvr, bgamari

Reviewed By: bgamari

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

3 years agodisable large address space on OpenBSD
Karel Gardas [Sat, 31 Oct 2015 22:16:53 +0000 (23:16 +0100)] 
disable large address space on OpenBSD

Summary:
This patch disables large address space on OpenBSD. The motivation
for this is that OpenBSD does not support MAP_NORESERVE. The flag is supported
only for source code compatibility reasons but is otherwise completely ignored
by the OS and its mmap syscall.

Reviewers: austin, bgamari

Subscribers: thomie, erikd

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

3 years agoRemove Data.List.NonEmpty.{words,unwords,lines,unlines}
Herbert Valerio Riedel [Sat, 31 Oct 2015 20:55:26 +0000 (21:55 +0100)] 
Remove Data.List.NonEmpty.{words,unwords,lines,unlines}

This change mirrors the change that occured for the recent
`semigroups-0.18` release, i.e.

  https://github.com/ekmett/semigroups/commit/7a000212847b0d309892f34e4754a25ddec7100b

This removal addresses concerns raised in #10365

3 years agoSignals: Ensure libdw session is freed
Ben Gamari [Sat, 31 Oct 2015 15:39:57 +0000 (16:39 +0100)] 
Signals: Ensure libdw session is freed

3 years agoFix documentation build on windows
Tamar Christina [Sat, 31 Oct 2015 17:12:42 +0000 (18:12 +0100)] 
Fix documentation build on windows

Summary:
Fix building new Sphinx documenation on Windows in msys2 using Awson's patch on #11021.

Install Sphinx using `pacman -S mingw-w64-$(uname -m)-python2-sphinx`

Test Plan: Apply patch and ./validate

Reviewers: thomie, bgamari, austin

Reviewed By: thomie, bgamari

Subscribers: erikd

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

GHC Trac Issues: #11021

3 years agoMake ghc-cabal's `System.Directory` import more robust
Herbert Valerio Riedel [Sat, 31 Oct 2015 15:13:50 +0000 (16:13 +0100)] 
Make ghc-cabal's `System.Directory` import more robust

Starting with directory-1.2.5 there will be a nameclash with
`withCurrentDirectory` and `MIN_VERSION_filepath()` isn't available at
bootstrap-time with the current GHC build-system.

By using explicit import lists we avoid CPP altogether

3 years agoAdd subWordC# on x86ish
Nikita Karetnikov [Sat, 31 Oct 2015 11:27:54 +0000 (12:27 +0100)] 
Add subWordC# on x86ish

This adds a subWordC# primop which implements subtraction with overflow
reporting.

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

Reviewed By: bgamari

Subscribers: thomie

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

GHC Trac Issues: #10962

3 years agoUpdate parallel submodule
Herbert Valerio Riedel [Sat, 31 Oct 2015 12:51:10 +0000 (13:51 +0100)] 
Update parallel submodule

This is needed to prepare for #11026 as this update
relaxes the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agoUpdate primitive/vector submodules
Herbert Valerio Riedel [Sat, 31 Oct 2015 09:58:28 +0000 (10:58 +0100)] 
Update primitive/vector submodules

This is needed to prepare for #11026 as these updates
relax the upper bounds on `base` to allow for `base-4.9.0.0`

3 years agounreg: handle CmmStack in C codegen (unbreaks '-g')
Sergei Trofimovich [Fri, 30 Oct 2015 21:36:04 +0000 (21:36 +0000)] 
unreg: handle CmmStack in C codegen (unbreaks '-g')

The patch makes
    $ make test TEST="debug T10667"
not to fail on CmmStack code generation phase

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
3 years agotestsuite: 'threaded2' tests require '-N' RTS option support
Sergei Trofimovich [Fri, 30 Oct 2015 21:09:39 +0000 (21:09 +0000)] 
testsuite: 'threaded2' tests require '-N' RTS option support

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
3 years agotestsuite: performGC requires SMP support for 'qg' option
Sergei Trofimovich [Fri, 30 Oct 2015 21:04:49 +0000 (21:04 +0000)] 
testsuite: performGC requires SMP support for 'qg' option

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
3 years agoMake type-class dictionary let binds deterministic
Bartosz Nitka [Fri, 30 Oct 2015 22:40:21 +0000 (23:40 +0100)] 
Make type-class dictionary let binds deterministic

When generating dictionary let binds in dsTcEvBinds we may
end up generating them in arbitrary order according to Unique order.

Consider:

```
let $dEq = GHC.Classes.$fEqInt in
let $$dNum = GHC.Num.$fNumInt in ...
```

vs

```
let $dNum = GHC.Num.$fNumInt in
let $dEq = GHC.Classes.$fEqInt in ...
```

The way this change fixes it is by using `UniqDFM` - a type of
deterministic finite maps of things keyed on `Unique`s. This way when
you pull out evidence variables corresponding to type-class dictionaries
they are in deterministic order.

Currently it's the order of insertion and the way it's implemented is by
tagging the values with the time of insertion.

Test Plan:
I've added a new test case to reproduce the issue.
./validate

Reviewers: ezyang, simonmar, austin, simonpj, bgamari

Reviewed By: simonmar, simonpj, bgamari

Subscribers: thomie

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

GHC Trac Issues: #4012

3 years agoAdd failing test for #11039
Matthew Pickering [Fri, 30 Oct 2015 20:09:33 +0000 (21:09 +0100)] 
Add failing test for #11039

Reviewers: austin, bgamari

Subscribers: thomie

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

GHC Trac Issues: #11039

3 years agorts: Make MBLOCK_SPACE_SIZE dynamic
Ben Gamari [Fri, 30 Oct 2015 19:48:53 +0000 (20:48 +0100)] 
rts: Make MBLOCK_SPACE_SIZE dynamic

Previously this was introduced in D524 as a compile-time constant.
Sadly, this isn't flexible enough to allow for environments where
ulimits restrict the maximum address space size (see, for instance,

Consequently, we are forced to make this dynamic. In principle this
shouldn't be so terrible as we can place both the beginning and end
addresses within the same cache line, likely incurring only one or so
additional instruction in HEAP_ALLOCED.

Test Plan: validate

Reviewers: austin, simonmar

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #10877

3 years agoReimplement shadowing on a per database basis.
Edward Z. Yang [Tue, 27 Oct 2015 21:47:33 +0000 (14:47 -0700)] 
Reimplement shadowing on a per database basis.

Summary:
This commit reimplements shadowing on package databases by doing
the shadowing calculation on a per-database basis: specifically,
if a later package database shadows a package from the earlier
databases, we first remove that package (and its transitive
dependencies) before merging the databases together.

This should also fix bootstrapping GHC HEAD with HEAD.

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

Reviewers: ggreif, bgamari, austin

Subscribers: thomie

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

3 years agoGenerate Typeable info at definition sites
Ben Gamari [Fri, 30 Oct 2015 19:22:42 +0000 (20:22 +0100)] 
Generate Typeable info at definition sites

This is the second attempt at merging D757.

This patch implements the idea floated in Trac #9858, namely that we
should generate type-representation information at the data type
declaration site, rather than when solving a Typeable constraint.

However, this turned out quite a bit harder than I expected. I still
think it's the right thing to do, and it's done now, but it was quite
a struggle.

See particularly

 * Note [Grand plan for Typeable] in TcTypeable (which is a new module)
 * Note [The overall promotion story] in DataCon (clarifies existing
stuff)

The most painful bit was that to generate Typeable instances (ie
TyConRepName bindings) for every TyCon is tricky for types in ghc-prim
etc:

 * We need to have enough data types around to *define* a TyCon
 * Many of these types are wired-in

Also, to minimise the code generated for each data type, I wanted to
generate pure data, not CAFs with unpackCString# stuff floating about.

Performance
~~~~~~~~~~~
Three perf/compiler tests start to allocate quite a bit more. This isn't
surprising, because they all allocate zillions of data types, with
practically no other code, esp. T1969

 * T1969:    GHC allocates 19% more
 * T4801:    GHC allocates 13% more
 * T5321FD:  GHC allocates 13% more
 * T9675:    GHC allocates 11% more
 * T783:     GHC allocates 11% more
 * T5642:    GHC allocates 10% more

I'm treating this as acceptable. The payoff comes in Typeable-heavy
code.

Remaining to do
~~~~~~~~~~~~~~~

 * I think that "TyCon" and "Module" are over-generic names to use for
   the runtime type representations used in GHC.Typeable. Better might
be
   "TrTyCon" and "TrModule". But I have not yet done this

 * Add more info the the "TyCon" e.g. source location where it was
   defined

 * Use the new "Module" type to help with Trac Trac #10068

 * It would be possible to generate TyConRepName (ie Typeable
   instances) selectively rather than all the time. We'd need to persist
   the information in interface files. Lacking a motivating reason I
have
   not done this, but it would not be difficult.

Refactoring
~~~~~~~~~~~
As is so often the case, I ended up refactoring more than I intended.
In particular

 * In TyCon, a type *family* (whether type or data) is repesented by a
   FamilyTyCon
     * a algebraic data type (including data/newtype instances) is
       represented by AlgTyCon This wasn't true before; a data family
       was represented as an AlgTyCon. There are some corresponding
       changes in IfaceSyn.

     * Also get rid of the (unhelpfully named) tyConParent.

 * In TyCon define 'Promoted', isomorphic to Maybe, used when things are
   optionally promoted; and use it elsewhere in GHC.

 * Cleanup handling of knownKeyNames

 * Each TyCon, including promoted TyCons, contains its TyConRepName, if
   it has one. This is, in effect, the name of its Typeable instance.

Updates haddock submodule

Test Plan: Let Harbormaster validate

Reviewers: austin, hvr, goldfire

Subscribers: goldfire, thomie

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

GHC Trac Issues: #9858

3 years agoTestsuite: suggest quoting $(TEST_HC)
Thomas Miedema [Fri, 30 Oct 2015 19:22:24 +0000 (20:22 +0100)] 
Testsuite: suggest quoting $(TEST_HC)

Test Plan: it works

Reviewers: bgamari, rwbarton, austin

Reviewed By: austin

Subscribers: rwbarton

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

3 years agodriver: use PROGBITS type for .debug-ghc-link-info section
Sylvain HENRY [Fri, 30 Oct 2015 18:55:24 +0000 (19:55 +0100)] 
driver: use PROGBITS type for .debug-ghc-link-info section

Previously the `.debug-ghc-link-info` section was of type `SHT_NOTE` but
this is not compliant with the ELF specification, which requires that
`NOTE` sections are in a particular record-based format. We mark this
section as `PROGBITS` instead, which is defined as implying no
particular format.

Fixes #11022.

Reviewers: bgamari, austin

Reviewed By: bgamari, austin

Subscribers: thomie, hsyl20

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

GHC Trac Issues: #11022

3 years agoMove win32 tarball download logic to script
Ben Gamari [Fri, 30 Oct 2015 18:54:45 +0000 (19:54 +0100)] 
Move win32 tarball download logic to script

This allows it to be used by users and packagers to grab the tarballs
necessary to generate a source tarball.

Test Plan: try it

Reviewers: thomie, austin, Phyx

Reviewed By: thomie, austin, Phyx

Subscribers: erikd

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

3 years agoUnify: Add Outputable instance for UnifyResultM
Ben Gamari [Fri, 30 Oct 2015 18:54:22 +0000 (19:54 +0100)] 
Unify: Add Outputable instance for UnifyResultM

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: thomie

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

3 years agoInsert an empty line between two STG definitions in dump output.
Ömer Sinan Ağacan [Fri, 30 Oct 2015 18:54:10 +0000 (19:54 +0100)] 
Insert an empty line between two STG definitions in dump output.

(Simplifier and desugarer do this already)

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

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

3 years agoLinker: Clean up USE_MMAP usage
Erik de Castro Lopo [Fri, 30 Oct 2015 18:54:04 +0000 (19:54 +0100)] 
Linker: Clean up USE_MMAP usage

Test Plan: Validate on powerpc/linux, x86_64/linux and x86_64/darwin

Reviewers: austin, bgamari, thomie

Reviewed By: thomie

Subscribers: Phyx, thomie

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