ghc.git
4 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

4 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

4 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

4 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

4 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

4 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

4 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.

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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.

4 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

4 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.

4 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

4 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

4 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

4 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

4 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.

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

4 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.

4 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
```

4 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

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

4 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

4 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

4 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.

4 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

4 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

4 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.

4 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]

4 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.

4 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`

4 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`

4 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)

4 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`

4 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`

4 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`

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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`

4 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`

4 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>
4 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>
4 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>
4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 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

4 years agoCmmParse: Expose popcnt operations
Ben Gamari [Fri, 30 Oct 2015 18:53:52 +0000 (19:53 +0100)] 
CmmParse: Expose popcnt operations

Make various population count operations available via C-- syntax
under the names %popcnt{8,16,32,64}. Fixes #11037.

Reviewers: simonmar, austin, ekmett

Reviewed By: austin, ekmett

Subscribers: thomie

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

GHC Trac Issues: #11037

4 years agoFix segfault due to reading non-existent memory
Simon Marlow [Fri, 30 Oct 2015 18:53:44 +0000 (19:53 +0100)] 
Fix segfault due to reading non-existent memory

It was possible to read non-existent memory, if we try to read the
srt_offset field of an info table when there is no SRT, and the info
table is right at the start of the text section.

This actually happened to me, I'm not sure why it never happened
before.

Test Plan: validate

Reviewers: rwbarton, ezyang, austin, bgamari

Reviewed By: austin, bgamari

Subscribers: thomie

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

4 years agoBuild system: cabalise deriveConstants + genprimopcode
Thomas Miedema [Mon, 26 Oct 2015 12:30:07 +0000 (13:30 +0100)] 
Build system: cabalise deriveConstants + genprimopcode

This is needed for #10374 (but doesn't fix it yet).

Also rename DeriveConstants.hs to Main.hs, because the build
system has trouble with Main modules not called Main.hs.

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

4 years agoBuild system: cleanup a few .cabal files
Thomas Miedema [Tue, 27 Oct 2015 13:01:48 +0000 (14:01 +0100)] 
Build system: cleanup a few .cabal files

4 years agoBuild system: rename runghc.hs to Main.hs
Thomas Miedema [Tue, 27 Oct 2015 12:25:15 +0000 (13:25 +0100)] 
Build system: rename runghc.hs to Main.hs

The build system has trouble with Main modules not called Main.hs. This
change allows a hack in utils/runghc/ghc.mk to be removed.

4 years agoDisambiguate record selectors by type signature
Adam Gundry [Fri, 30 Oct 2015 14:14:21 +0000 (14:14 +0000)] 
Disambiguate record selectors by type signature

This makes DuplicateRecordFields more liberal in when it will
accept ambiguous record selectors, making use of type information in a
similar way to updates. See Note [Disambiguating record fields] for more
details. I've also refactored how record updates are disambiguated.

Test Plan: New and amended tests in overloadedrecflds

Reviewers: simonpj, goldfire, bgamari, austin

Subscribers: thomie

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

4 years agointegerConstantFolding: when(compiler_debugged(), expect_broken(#11006))
Thomas Miedema [Fri, 30 Oct 2015 12:22:04 +0000 (13:22 +0100)] 
integerConstantFolding: when(compiler_debugged(), expect_broken(#11006))

4 years agoKill redundant import
Simon Peyton Jones [Fri, 30 Oct 2015 09:45:16 +0000 (09:45 +0000)] 
Kill redundant import

I don't really understand this.  GHC.hs had:

  module GHC( ...,  module HsSyn, ... ) where
    import HsSyn
    import qualified HsSyn -- hack as we want to reexport the whole module

GHC now reports the 'import qualified' line as redundant; and it certainly
is, because 'import HsSyn' brings everything into scope qualified *and*
unqualified.   I have no idea why the "hack" was necessary before, but
following my refactoring of tcg_used_gres (previous commit), it's reported
as redundant, so I've deleted it.

I'm making it a separate commit because it seems a bit mysterious and I
wanted to draw attention to it.

4 years agoRecord usage information using GlobalRdrElt
Simon Peyton Jones [Fri, 30 Oct 2015 09:41:47 +0000 (09:41 +0000)] 
Record usage information using GlobalRdrElt

This patch implements an improvment that I've wanted to do for ages, but
never gotten around to.

Unused imports are computed based on how imported entities occur (qualified,
unqualified).   This info was accumulated in tcg_used_rdrnames :: Set RdrName.
But that was a huge pain, and it got worse when we introduced duplicate
record fields.

The Right Thing is to record tcg_used_gres :: [GlobalRdrElt], which records
the GRE *after* filtering with pickGREs.  See Note [GRE filtering] in RdrName.
This is much, much bette.  This patch deletes quite a bit of code, and is
conceptually much easier to follow.

Hooray.  There should be no change in functionality.

4 years agoFix unused-import stuff in a better way
Simon Peyton Jones [Wed, 28 Oct 2015 17:16:55 +0000 (17:16 +0000)] 
Fix unused-import stuff in a better way

The fix for Trac #10890 in commit 1818b48, namely
   Fix incorrect import warnings when methods with identical names are imported
was wrong, as demonstrated by the new test T10890_2.  It suppressed
far too many warnings!

This patch fixes the original problem in a different way, by making
RdrName.greUsedRdrName a bit cleverer.

But this too is not really the Right Thing.  I think the Right Thing is
to store the /GRE/ in the tcg_used_rdrnames, not the /RdrName/.  That
would be a lot simpler and more direct.

But one step at a time.

4 years agoSwap prov/req in variable naming in Parser.y
Simon Peyton Jones [Wed, 28 Oct 2015 12:21:50 +0000 (12:21 +0000)] 
Swap prov/req in variable naming in Parser.y

This is a follow on to the patch for Trac #10928.
It's a local renaming of variables only; no change in behaviour.

4 years agoLinker: Fix type in m32_free_internal
Erik de Castro Lopo [Fri, 30 Oct 2015 04:07:21 +0000 (15:07 +1100)] 
Linker: Fix type in m32_free_internal

The code:

    uint64_t c = __sync_sub_and_fetch((uint64_t*)addr, 1);

was causing GCC to emit atomic instructions for 64 bit values which
are not available on PowerPC. However, since PowerPC only has a 32
bit address space, use of a 64 bit value is superflous.

Switching the type from `uint64_t` to `uintptr_t` should simply do
the correct thing on all 32 and 64 bit architectures.

Reviewers: austin, bgamari, simonmar

Subscribers: thomie

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

GHC Trac Issues: #11036

4 years agox86 codegen: don't generate location comments
Sergei Trofimovich [Thu, 29 Oct 2015 23:03:42 +0000 (23:03 +0000)] 
x86 codegen: don't generate location comments

The following source snippet 'module A where x */* y = 42'
when being compiled with '-g' option emits syntactically
invalid comment for GNU as:

    .text
        .align 8
        .loc 1 3 1 /* */* */

Fixed by not emitting comments at all. We already suppress
all asm comments in 'X86/Ppr.hs'.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
Test Plan: added test and check it works

Reviewers: scpmw, simonmar, austin, bgamari

Reviewed By: simonmar

Subscribers: thomie

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

GHC Trac Issues: #10667

4 years agoRevert "Generate Typeable info at definition sites"
Ben Gamari [Thu, 29 Oct 2015 16:41:34 +0000 (17:41 +0100)] 
Revert "Generate Typeable info at definition sites"

This reverts commit bef2f03e4d56d88a7e9752a7afd6a0a35616da6c.

This merge was botched

Also reverts haddock submodule.

4 years agoGenerate Typeable info at definition sites
Ben Gamari [Wed, 26 Aug 2015 16:24:34 +0000 (18:24 +0200)] 
Generate Typeable info at definition sites

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

 * T3294:   GHC allocates 110% more (filed #11030 to track this)
 * T1969:   GHC allocates 30% more
 * T4801:   GHC allocates 14% more
 * T5321FD: GHC allocates 13% more
 * T783:    GHC allocates 12% more
 * T9675:   GHC allocates 12% more
 * T5642:   GHC allocates 10% more
 * T9961:   GHC allocates 6% more

 * T9203:   Program allocates 54% less

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.

Requires update of the haddock submodule.

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

4 years agoDynFlags: Add (another) missing hunk from D1360
Ben Gamari [Thu, 29 Oct 2015 14:42:39 +0000 (15:42 +0100)] 
DynFlags: Add (another) missing hunk from D1360

What a disaster this merge was.

4 years agoTcTyDecls: Remove redundant import of Applicative
Ben Gamari [Thu, 29 Oct 2015 15:12:17 +0000 (11:12 -0400)] 
TcTyDecls: Remove redundant import of Applicative

4 years agoMove mkDefaultMethodIds, mkRecSelBinds from TcTyClsDecls to TcTyDecls
Ben Gamari [Wed, 28 Oct 2015 17:28:57 +0000 (18:28 +0100)] 
Move mkDefaultMethodIds, mkRecSelBinds from TcTyClsDecls to TcTyDecls

4 years agoRevert "Build system: don't create mk/are-validating.mk"
Thomas Miedema [Tue, 27 Oct 2015 15:46:01 +0000 (16:46 +0100)] 
Revert "Build system: don't create mk/are-validating.mk"

Summary:
This reverts commit aecf4a5f96d0d3ffcf4cb2c67a20a610d7c64486.

It turns out the Simons are relying on 'mk/are-validating.mk', see
D1307.

The workflow they are using is:
  * run ./validate
  * find a bug in the compiler
  * try to fix the bug, running 'make 1' (or 'make 2') repeatedly. Because
    of 'mk/are-validating.mk', this uses the same build settings as validate.
  * continue ./validate (--no-clean)

I suggested two alternatives:

  A. run 'make 1 Validating=YES' instead of 'make 1'

     Problem: when running `./validate --fast` or `./validate --hpc`
     instead of a normal `./validate`, validate sets ValidateSpeed and
     ValdateHpc in mk/are-validating.mk. You would for example have to run
     'make 1 Validating=YES ValidateSpeed=FAST' instead of 'make 1' to get the
     same build settings as `./validate --fast`, which is entirely too long and
     error prone.

  B. uncomment `#BuildFlavour=validate` in mk/build.mk, and include
     'mk/validate.mk'.

     Problems:
      * any other settings you have in build.mk will also get used.
      * the distinction between 'mk/validate.mk' and 'mk/build.mk' becomes less
        clear.
      * it is easy to forget to include 'mk/validate.mk'.
      * the build system again doesn't have access to the ValidateSpeed and
        ValdateHpc settings set by validate.

Neither of these two options is entirely satisfactory.

Reviewers: austin, bgamari

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

4 years agoRecord pattern synonyms
Matthew Pickering [Mon, 19 Oct 2015 20:17:29 +0000 (21:17 +0100)] 
Record pattern synonyms

This patch implements an extension to pattern synonyms which allows user
to specify pattern synonyms using record syntax. Doing so generates
appropriate selectors and update functions.

=== Interaction with Duplicate Record Fields ===

The implementation given here isn't quite as general as it could be with
respect to the recently-introduced `DuplicateRecordFields` extension.

Consider the following module:

    {-# LANGUAGE DuplicateRecordFields #-}
    {-# LANGUAGE PatternSynonyms #-}

    module Main where

    pattern S{a, b} = (a, b)
    pattern T{a}    = Just a

    main = do
      print S{ a = "fst", b = "snd" }
      print T{ a = "a" }

In principle, this ought to work, because there is no ambiguity. But at
the moment it leads to a "multiple declarations of a" error. The problem
is that pattern synonym record selectors don't do the same name mangling
as normal datatypes when DuplicateRecordFields is enabled. They could,
but this would require some work to track the field label and selector
name separately.

In particular, we currently represent datatype selectors in the third
component of AvailTC, but pattern synonym selectors are just represented
as Avails (because they don't have a corresponding type constructor).
Moreover, the GlobalRdrElt for a selector currently requires it to have
a parent tycon.

(example due to Adam Gundry)

=== Updating Explicitly Bidirectional Pattern Synonyms ===

Consider the following

```
pattern Silly{a} <- [a] where
  Silly a = [a, a]

f1 = a [5] -- 5

f2 = [5] {a = 6} -- currently [6,6]
```

=== Fixing Polymorphic Updates ===

They were fixed by adding these two lines in `dsExpr`. This might break
record updates but will be easy to fix.

```
+ ; let req_wrap = mkWpTyApps (mkTyVarTys univ_tvs)

- , pat_wrap = idHsWrapper }
+, pat_wrap = req_wrap }
```

=== Mixed selectors error ===

Note [Mixed Record Field Updates]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Consider the following pattern synonym.

    data MyRec = MyRec { foo :: Int, qux :: String }

    pattern HisRec{f1, f2} = MyRec{foo = f1, qux=f2}

This allows updates such as the following

    updater :: MyRec -> MyRec
    updater a = a {f1 = 1 }

It would also make sense to allow the following update (which we
reject).

    updater a = a {f1 = 1, qux = "two" } ==? MyRec 1 "two"

This leads to confusing behaviour when the selectors in fact refer the
same field.

    updater a = a {f1 = 1, foo = 2} ==? ???

For this reason, we reject a mixture of pattern synonym and normal
record selectors in the same update block. Although of course we still
allow the following.

    updater a = (a {f1 = 1}) {foo = 2}

    > updater (MyRec 0 "str")
    MyRec 2 "str"

4 years agoRevert "Build system: don't add ALL_HC_OPTS when linking"
Ben Gamari [Thu, 29 Oct 2015 10:45:45 +0000 (06:45 -0400)] 
Revert "Build system: don't add ALL_HC_OPTS when linking"

This reverts commit 9fc2d777f53110040f48ab27643a16888fa377f5.

This appears to cause interface file issues during rebuilds. Punting
back to @thomie for further investigation.

4 years agoTestsuite: report and error out on unfound tests
Thomas Miedema [Wed, 28 Oct 2015 11:28:59 +0000 (12:28 +0100)] 
Testsuite: report and error out on unfound tests

Users are sometimes confused why their test doesn't run. It is usually
because of a misspelled testname, for example using 'TEST=1234' instead
of 'TEST=T1234'. After this patch it is hopefully more clear what the
problem is, showing:

    ERROR: tests not found: ['1234']

Instead of:

    0 total tests, which gave rise to
    0 test cases, of which
    0 were skipped

Reviewed by: austin, bgamari

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

4 years agoBackpack documentation updates for component IDs [no-ci]
Edward Z. Yang [Thu, 29 Oct 2015 07:16:28 +0000 (00:16 -0700)] 
Backpack documentation updates for component IDs [no-ci]

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
4 years agoFix rts/T9579 tests on OS X
Erik de Castro Lopo [Thu, 29 Oct 2015 00:25:42 +0000 (11:25 +1100)] 
Fix rts/T9579 tests on OS X

Sed on OS X does not understand 's/[0-9]\+ bytes/NUM bytes/g' but
sed on Linux and OS X do understand 's/[0-9]* bytes/NUM bytes/g'.

Test Plan: Run all rts/T9579 tests on Linux and Mac

Reviewers: thomie, austin, bgamari

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