ghc.git
4 years agoCorrect BangPat SrcSpan calculation ghc-7.10.2-rc2
Matthew Pickering [Mon, 29 Jun 2015 19:11:17 +0000 (21:11 +0200)] 
Correct BangPat SrcSpan calculation

Summary:
Previously when the split was performed in splitBang, `BangPat` was given the
same SrcSpan as the whole of the LHS of the declaration. This patch
correctly calculates the value.

Reviewers: alanz, austin

Reviewed By: alanz, austin

Subscribers: thomie, bgamari

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

GHC Trac Issues: #10588

(cherry picked from commit c6bb2fc50716a2fc540d55ecddbc5c14e94979f7)

4 years agorelnotes: More 7.10.2 release notes
Austin Seipp [Sun, 28 Jun 2015 00:34:17 +0000 (19:34 -0500)] 
relnotes: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agocloseOverKinds *before* oclose in coverage check
Simon Peyton Jones [Fri, 26 Jun 2015 13:28:45 +0000 (14:28 +0100)] 
closeOverKinds *before* oclose in coverage check

Combining functional dependencies with kind-polymorphism is
devilishly tricky!  It's all documented in
    Note [Closing over kinds in coverage]

Fixes Trac #10564

(cherry picked from commit 7c07cf16ab5d5bdfb64efb1d4fc5f20cf7437437)

4 years agoFix deadlock (#10545)
Simon Marlow [Fri, 19 Jun 2015 14:12:24 +0000 (15:12 +0100)] 
Fix deadlock (#10545)

yieldCapability() was not prepared to be called by a Task that is not
either a worker or a bound Task.  This could happen if we ended up in
yieldCapability via this call stack:

performGC()
scheduleDoGC()
requestSync()
yieldCapability()

and there were a few other ways this could happen via requestSync.
The fix is to handle this case in yieldCapability(): when the Task is
not a worker or a bound Task, we put it on the returning_workers
queue, where it will be woken up again.

Summary of changes:

* `yieldCapability`: factored out subroutine waitForWorkerCapability`
* `waitForReturnCapability` renamed to `waitForCapability`, and
  factored out subroutine `waitForReturnCapability`
* `releaseCapabilityAndQueue` worker renamed to `enqueueWorker`, does
  not take a lock and no longer tests if `!isBoundTask()`
* `yieldCapability` adjusted for refactorings, only change in behavior
  is when it is not a worker or bound task.

Test Plan:
* new test concurrent/should_run/performGC
* validate

Reviewers: niteria, austin, ezyang, bgamari

Subscribers: thomie, bgamari

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

GHC Trac Issues: #10545

(cherry picked from commit 111ba4beda4ffc48381723da12e5b237d7f9ac59)

4 years agoFix for crash in setnumcapabilities001
Simon Marlow [Fri, 19 Jun 2015 13:41:32 +0000 (14:41 +0100)] 
Fix for crash in setnumcapabilities001

getNewNursery() was unconditionally incrementing next_nursery, which
is normally fine but it broke an assumption in
storageAddCapabilities().  This manifested as an occasional crash in
the setnumcapabilities001 test.

(cherry picked from commit be0ce8718ea40b091e69dd48fe6bc62b6b551154)

4 years agoComments only
Reid Barton [Thu, 25 Jun 2015 18:26:40 +0000 (14:26 -0400)] 
Comments only

(cherry picked from commit a7eee0d8a25789ce1ef349304d27e2a5e22766b7)

4 years agoMake enum01/enum02/enum03 tests clang-compatible
Reid Barton [Tue, 16 Jun 2015 21:39:15 +0000 (16:39 -0500)] 
Make enum01/enum02/enum03 tests clang-compatible

... by entirely replacing the use of CPP by a custom preprocessor;
clang -E -traditional has no stringification mechanism at all.

Reviewed By: thomie, austin

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

GHC Trac Issues: #9399

(cherry picked from commit b98ca17e12c7efdc906f4901f25e6263a5399be1)

4 years agoBe aware of overlapping global STG registers in CmmSink (#10521)
Reid Barton [Thu, 25 Jun 2015 17:53:57 +0000 (13:53 -0400)] 
Be aware of overlapping global STG registers in CmmSink (#10521)

Summary:
On x86_64, commit e2f6bbd3a27685bc667655fdb093734cb565b4cf assigned
the STG registers F1 and D1 the same hardware register (xmm1), and
the same for the registers F2 and D2, etc. When mixing calls to
functions involving Float#s and Double#s, this can cause wrong Cmm
optimizations that assume the F1 and D1 registers are independent.

Reviewers: simonpj, austin

Reviewed By: austin

Subscribers: simonpj, thomie, bgamari

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

GHC Trac Issues: #10521

(cherry picked from commit a2f828a370b220839ad9b31a274c0198ef91b7fe)

4 years agopowerpc: add basic support for PLT relocations (#10402)
Sergei Trofimovich [Tue, 23 Jun 2015 12:39:34 +0000 (07:39 -0500)] 
powerpc: add basic support for PLT relocations (#10402)

Commit a93ab43ab5f40cadbedea2f6342b93c245e91434
enabled support for proper PIC relocations from
assembler.

Commit adds support for relocations of type:
    R_PPC_REL16_HI
    R_PPC_REL16_HA
    R_PPC_REL16_LO
    R_PPC_PLTREL24

They are used only when GHC is built in
    DYNAMIC_GHC_PROGRAMS = NO
mode.

Verified by running the following test:

    // cat a.c
    #include <stdio.h>

    void ffi_a_hello (int i) {
        fprintf (stderr, "WEEEEEEEE: i=%d\n", i);
    }

    -- cat A.hs
    {-# LANGUAGE ForeignFunctionInterface #-}
    module A where

    import Foreign.C

    foreign import ccall "ffi_a_hello" a :: CInt -> IO ()

    # ghc -fPIC -c a.c -fforce-recomp
    # ghc -fPIC -c A.hs -fforce-recomp
    # ghc --interactive ./a.o A
    ...
    *A> a 42
    WEEEEEEEE: i=42
See gory details in Trac #10402.

Signed-off-by: Colin Watson <cjwatson@debian.org>
Signed-off-by: Sergei Trofimovich <siarheit@google.com>
Reviewed By: bgamari, austin

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

GHC Trac Issues: #10402

(cherry picked from commit c0847967caf51ea4ca88d0ffc25fe1bd99dcabed)

4 years agoAdd parsePattern parser entry point
Alan Zimmerman [Sun, 21 Jun 2015 19:52:58 +0000 (21:52 +0200)] 
Add parsePattern parser entry point

Reviewers: austin, thomie, alanz

Reviewed By: thomie, alanz

Subscribers: thomie, bgamari

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

GHC Trac Issues: #10556

(cherry picked from commit 38f374571290b8115ef5b82587ac2ec6c18e91f1)

4 years agoParser: commas_tup_tail duplicate SrcSpan on "Missing" value
Alan Zimmerman [Thu, 18 Jun 2015 14:19:50 +0000 (16:19 +0200)] 
Parser: commas_tup_tail duplicate SrcSpan on "Missing" value

Summary:
Parsing

    {-# LANGUAGE TupleSections #-}

    baz = (1, "hello", 6.5,,) 'a' (Just ())

Results in the following AST fragment

    (L tests/examples/Tuple.hs:3:7-25
       (ExplicitTuple
          [ L tests/examples/Tuple.hs:3:8
              (Present
                 (L tests/examples/Tuple.hs:3:8
                    (HsOverLit
                       (OverLit
                          (HsIntegral [ '1' ] 1)
                          PlaceHolder
                          (HsLit
                             (HsString
                                []
                                {abstract:FastString}))
                          PlaceHolder))))
          , L tests/examples/Tuple.hs:3:11-17
              (Present
                 (L tests/examples/Tuple.hs:3:11-17
                    (HsLit
                       (HsString
                          [ '"'
                          , 'h'
                          , 'e'
                          , 'l'
                          , 'l'
                          , 'o'
                          , '"'
                          ]
                          {abstract:FastString}))))
          , L tests/examples/Tuple.hs:3:20-22
              (Present
                 (L tests/examples/Tuple.hs:3:20-22
                    (HsOverLit
                       (OverLit
                          (HsFractional
                             (FL
                                [ '6' , '.' , '5' ]
                                (:% 13 2)))
                          PlaceHolder
                          (HsLit
                             (HsString
                                []
                                {abstract:FastString}))
                          PlaceHolder))))
          , L tests/examples/Tuple.hs:3:24
              (Missing PlaceHolder)
          , L tests/examples/Tuple.hs:3:24
              (Missing PlaceHolder)
          ]

The final `Missing PlaceHolder` has a duplicated `SrcSpan`

Test Plan: ./validate

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie, bgamari, mpickering

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

GHC Trac Issues: #10537

(cherry picked from commit 72b21c393831b49867a296f19a2d039e48bb8dcd)

4 years agoRevert "Look inside synonyms for foralls when unifying"
Austin Seipp [Thu, 18 Jun 2015 15:34:28 +0000 (10:34 -0500)] 
Revert "Look inside synonyms for foralls when unifying"

As discussed in #10194, this patch - while fixing a bug - also causes a
minor regression when compiling certain in-the-wild programs, meaning
some extant programs now failed with 7.10.2 RC1. Womp womp.

This reverts commit 681d82c0d44f06f0b958b75778c30b0910df982b.

4 years agoCare with impossible-cons in combineIdenticalAlts
Simon Peyton Jones [Thu, 18 Jun 2015 07:51:08 +0000 (08:51 +0100)] 
Care with impossible-cons in combineIdenticalAlts

This was a nasty, long-standing bug exposed in Trac #10538.
Symptoms were that we had an empty case
   case (x :: Either a) of {}
Core Lint correctly picked this bogus code up.

Here is what happened

* In SimplUtils.prepareAlts, we call
        filterAlts
  then
        combineIdenticalAlts

* We had    case x of { Left _ -> e1; Right _ -> e1 }

* filterAlts did nothing, but correctly retuned imposs_deflt_cons
  saying that 'x' cannot be {Left, Right} in the DEFAULT branch,
  if any (there isn't one.)

* combineIdentialAlts correctly combines the identical alts, to give
     case x of { DEFAULT -> e1 }

* BUT combineIdenticalAlts did no adjust imposs_deft_cons

* Result: when compiling e1 we did so in the belief that 'x'
  could not be {Left,Right}.  Disaster.

Easily fixed.

(It is hard to trigger; I can't construct a simple test case.)

(cherry picked from commit 023a0ba938b69bbb89cb2ce48a07459b07783391)

4 years agoFix ghc-pkg reports cache out date (#10205)
Thomas Miedema [Tue, 16 Jun 2015 21:38:38 +0000 (16:38 -0500)] 
Fix ghc-pkg reports cache out date (#10205)

See Note [writeAtomic leaky abstraction].

GHC on Linux already received a patch for this bug in
e0801a0fb342eea9a312906eab72874d631271cf. On Windows several cabal tests
were hitting the bug, causing validate failures, but we never noticed
because of all the other tests that were failing on Windows. And it
didn't start happening till `getModificationTime` received sub-second
resolution support on Windows in
5cf76186d373842bf64d49cecb09e0a9ddce3203.

Since there are regression tests already, I am not adding another one.
But for good measure, here is a script that shows the bug without
needing to do a full validate run:

  DB=/tmp/package.conf.d.test
  GHC_PKG=ghc-pkg #utils/ghc-pkg/dist/build/tmp/ghc-pkg
  LOCAL_GHC_PKG="${GHC_PKG} --no-user-package-db --global-package-db=${DB}"
  while true; do
    rm -rf ${DB}
    ${LOCAL_GHC_PKG} init "${DB}"
    ${LOCAL_GHC_PKG} list
  done

If you see "WARNING: cache is out of date" after a few seconds, the bug
is not fixed.

Reviewed By: austin

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

GHC Trac Issues: #10205

(cherry picked from commit f0636562908236f6ce9bf91796bc952534074a61)

4 years agoUpdate Cabal submodule to Cabal-v1.22.4.0 rls tag
Herbert Valerio Riedel [Wed, 17 Jun 2015 11:56:51 +0000 (13:56 +0200)] 
Update Cabal submodule to Cabal-v1.22.4.0 rls tag

This only fixes the version number, no code is changed

4 years agoFix #10534
Richard Eisenberg [Tue, 16 Jun 2015 01:55:52 +0000 (21:55 -0400)] 
Fix #10534

Test case: typecheck/should_fail/T10534

(cherry picked from commit 89c7168c150ccc38a2e6dd4a3aea555616722260)

4 years agorelnotes: More notes, some wordsmithing
Austin Seipp [Mon, 15 Jun 2015 14:26:04 +0000 (09:26 -0500)] 
relnotes: More notes, some wordsmithing

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoEnable SMP and GHCi support for Aarch64
Erik de Castro Lopo [Wed, 1 Apr 2015 04:46:01 +0000 (04:46 +0000)] 
Enable SMP and GHCi support for Aarch64

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
Test Plan: Full build on Aarch64

Reviewers: rwbarton, bgamari, austin

Subscribers: thomie

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

(cherry picked from commit 1e8c9b81a819da8eb54405a029fc33a9f5220321)

4 years agoUNREG: fix pprHexVal to emit zeros (#10518)
Sergei Trofimovich [Sun, 14 Jun 2015 15:42:03 +0000 (16:42 +0100)] 
UNREG: fix pprHexVal to emit zeros (#10518)

jakzale on #ghc reported a build failure
when ported GHC on a new target.

The code 'pprHexVal (2^32) W32' emits '0xU'
which is invalid C.

I've introduced bug in
    43f1b2ecd1960fa7377cf55a2b97c66059a701ef
when added literal truncation. That truncation
is a new source of zeros.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
Test Plan: added test and tested on UNREG ghc

Reviewers: austin

Reviewed By: austin

Subscribers: thomie, bgamari

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

GHC Trac Issues: #10518

(cherry picked from commit a5084557b0b30faf3f89386ee6ee5a308dae51b1)

4 years agorelnotes: Remove duplicate 'known bugs' entry
Austin Seipp [Mon, 15 Jun 2015 01:22:30 +0000 (20:22 -0500)] 
relnotes: Remove duplicate 'known bugs' entry

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: More 7.10.2 release notes ghc-7.10.2-rc1
Austin Seipp [Fri, 12 Jun 2015 19:30:46 +0000 (14:30 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:18:40 +0000 (14:18 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:16:18 +0000 (14:16 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:15:04 +0000 (14:15 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:13:59 +0000 (14:13 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: More 7.10.2 release notes
Austin Seipp [Fri, 12 Jun 2015 19:09:25 +0000 (14:09 -0500)] 
docs: More 7.10.2 release notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoutils: update haddock submodule
Austin Seipp [Fri, 12 Jun 2015 19:00:40 +0000 (14:00 -0500)] 
utils: update haddock submodule

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agolibraries: update Cabal submodule
Austin Seipp [Fri, 12 Jun 2015 19:00:01 +0000 (14:00 -0500)] 
libraries: update Cabal submodule

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agodocs: Fix #10416
Austin Seipp [Wed, 10 Jun 2015 21:43:23 +0000 (16:43 -0500)] 
docs: Fix #10416

This commit fixes #10416 by using an EPS-based file-format for embedding
images in the users guide, as opposed to a png. This is because 'latex'
in some distributions is actually 'pdflatex', which supports reading the
size of PNGs in DVI mode, while traditional latex does not.

Rather than fiddle with the build a whole bunch, it's easy and simple to
just convert the png into a eps file and embed that instead.

But apparently we already had an EPS file, added in
1cce2f51656cfbd8c7933a914a4bd981792aa1e6! But it was quite large, so
instead I used `convert` to shrink it down from 1.7MB to about 20kb, the
same size as the original PDF (by using level3 postscript, which is not
as wasteful.)

Signed-off-by: Austin Seipp <austin@well-typed.com>
Differential Revision: https://phabricator.haskell.org/D970

GHC Trac Issues: #10416

(cherry picked from commit ca39b96ee783e124909a89ea3ad366bf99defa7b)

4 years agoFix DWARF generation for MinGW (#10468)
Peter Wortmann [Thu, 11 Jun 2015 17:09:55 +0000 (12:09 -0500)] 
Fix DWARF generation for MinGW (#10468)

Fortunately this is relatively straightforward - all we need to do is
switch to a non-ELF-specific way of specifying object file sections and
make sure that section-relative addresses work correctly. This is enough
to make "gdb" work on MinGW builds.

(cherry picked from commit a66ef3567ea29c93a9c010befc672602dc1c644c)

4 years agoDo not copy stack after stack overflow, refix #8435
Flaviu Andrei Csernik (archblob) [Fri, 12 Jun 2015 16:45:55 +0000 (11:45 -0500)] 
Do not copy stack after stack overflow, refix #8435

Summary:
This was reverted in d70b19bfb5ed79b22c2ac31e22f46782fc47a117
and is a part of the reason for #10445.

Test Plan: validate

Reviewers: ezyang, simonmar, austin

Reviewed By: simonmar, austin

Subscribers: bgamari, thomie

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

GHC Trac Issues: #8435

(cherry picked from commit 892c3e98bcef50aa56ec818f4d001aee36e05bbc)

4 years agomake sdist: distclean testsuite for real (#10406)
Thomas Miedema [Tue, 9 Jun 2015 12:31:40 +0000 (14:31 +0200)] 
make sdist: distclean testsuite for real (#10406)

(cherry picked from commit 5828457d8d26fd33130d4b5850847c9a73a8d3e5)

4 years agoRevert "The test runner now also works under the msys-native Python."
Thomas Miedema [Thu, 4 Jun 2015 08:49:51 +0000 (10:49 +0200)] 
Revert "The test runner now also works under the msys-native Python."

To make the test runner work under msys-native Python...

Commit 5258566ee5c89aa757b0cf1433169346319c018f broke the msys testsuite
driver (#10441). It changed the quoting of `config.compiler` from single
quotes to double quote, which turns out to not be compatible with what
the function `passThroughCmd` expected.

We could fix `passThroughCmd` to handle the case where `config.compiler`
is double quoted, and scatter some notes around to make sure the quoting
done in various places of the testsuite driver stay compatible.

Instead, this commit reverts 101c62e26286353dd3fac1ef54323529b64c9902,
which introdced the function `passThroughCmd` in the first place
(#9626). ezyang reports that doing this revert fixes the testsuite
driver for him using the the following version of msys2:

  msys2-keyring r8.3864337-1
  msys2-runtime 2.1.0.16351.cd3184b-1
  msys2-runtime-devel 2.1.0.16351.cd3184b-1
  msys2-w32api-headers 5.0.0.4456.c8b6742-1
  msys2-w32api-runtime 5.0.0.4455.32db221-1

Ideally we'd know what minimum version of msys2 we require, but for now
this fix is better than nothing.

Only gintas ever reported the original problem, and he actually
mentioned shortly afterwards: "This may have been fixed by a recent
release of msys2, but I am not sure."

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

(cherry picked from commit bb9967121f2383b857680b47b6bc20607f8fd1ff)

4 years agohaddock: update submodule
Austin Seipp [Tue, 9 Jun 2015 11:34:06 +0000 (06:34 -0500)] 
haddock: update submodule

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoAlways force the exception in enqueued commands
Zejun Wu [Tue, 9 Jun 2015 10:42:38 +0000 (05:42 -0500)] 
Always force the exception in enqueued commands

`enqueueCommands` should always force exception in commands. Otherwise
the exception thrown in `:cmd` (e.g. `:cmd return $ head []`) will cause
GHCi to terminate with panic.

Test Plan: `cd testsuite/tests/ghci/ && make`

Reviewed By: austin

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

GHC Trac Issues: #10501

(cherry picked from commit 3b55659d4f54e503f4e550d762bc55a2650ed13d)

4 years agobuild: Clean testsuite before sdist
Austin Seipp [Thu, 4 Jun 2015 22:10:33 +0000 (17:10 -0500)] 
build: Clean testsuite before sdist

When making the `sdist` tarball, we don't really need anything inside
$(TOP)/testsuite in order to do our thing. So make sure we clean it
first to avoid situations like #10406.

With D917 landed, this can actually avoided entirely by fixing the
official release process to instead build an `sdist` //first// from the
clean git repository and then build that (to fixpoint) and test it. Then
the originall clean tarball can be shipped.

But it's nice to be safe in the general case where someone might want to
(in the future) `sdist` out of their build tree.

Signed-off-by: Austin Seipp <austin@well-typed.com>
Reviewed By: thomie

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

GHC Trac Issues: #10406

(cherry picked from commit a48167eaaa984fbdc1ad31c2c674058ba3669ac6)

4 years agodocs: More 7.10.2 notes
Austin Seipp [Tue, 9 Jun 2015 07:35:12 +0000 (02:35 -0500)] 
docs: More 7.10.2 notes

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoUpdate binary submodule to 0.7.5.0 release
Herbert Valerio Riedel [Mon, 1 Jun 2015 08:50:17 +0000 (10:50 +0200)] 
Update binary submodule to 0.7.5.0 release

Quoting the changelog, this pulls in the following fixes:

binary-0.7.5.0
--------------

- Fix performance bug that was noticable when you get a big strict ByteString
  and the input to the decoder consists of many small chunks.
    - https://github.com/kolmodin/binary/issues/73
    - https://github.com/kolmodin/binary/pull/76
- Fix memory leak when decoding Double and Float.
    - Commit 497a181c083fa9faf7fa3aa64d1d8deb9ac76ecb
- We now require QuickCheck >= 2.8. Remove our version of arbitrarySizedNatural.

binary-0.7.4.0
--------------

- Some invalid UTF-8 strings caused an exception when decoded. Those errors will
  now now fail in the Get monad instead. See issue 70.
  Patch contributed by @ttuegel.

(cherry picked from commit 7dd0ea7428379df848e3d13528921b39b7bf5b95)

4 years agoFix #10488 by unwrapping type synonyms.
Richard Eisenberg [Thu, 4 Jun 2015 21:05:02 +0000 (17:05 -0400)] 
Fix #10488 by unwrapping type synonyms.

Summary:
Previously, I had forgotten to unwrap vanilla type synonyms in the
"flattener" that is used around the closed-type-family apartness
check.

Test Plan: validate

Reviewers: austin

Subscribers: bgamari, thomie

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

GHC Trac Issues: #10488

(cherry picked from commit 761fb7c4869a081da7320e4307dcb947b5ed95d1)

4 years agotestsuite: Add test for #10489
Austin Seipp [Tue, 9 Jun 2015 02:47:48 +0000 (21:47 -0500)] 
testsuite: Add test for #10489

This is half of 61b96a86c5342fb1c850361177d60fe855d948f6 essentially -
just to make sure the 7.10 branch doesn't regress on #10489.

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agotestsuite: fix T9858e fallout
Austin Seipp [Tue, 9 Jun 2015 02:43:57 +0000 (21:43 -0500)] 
testsuite: fix T9858e fallout

From 28943a8925427a5aafa7013e3ad47ff4511985da, in which I forgot about
the 'error:' thing.

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agotestsuite: Fix minor print007 fallout
Austin Seipp [Tue, 9 Jun 2015 02:42:43 +0000 (21:42 -0500)] 
testsuite: Fix minor print007 fallout

This was from fixing #10052.

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoghc-pkg support query by package-key, fixes #9507
Edward Z. Yang [Wed, 3 Jun 2015 17:55:58 +0000 (10:55 -0700)] 
ghc-pkg support query by package-key, fixes #9507

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

Reviewers: austin

Subscribers: bgamari, thomie

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

GHC Trac Issues: #9507

(cherry picked from commit c69b69d2cda890e6f3f6aa1fd4092421e6053b89)

4 years agoGive a hint when a TH splice has a bad package key, partially fixes #10279
Edward Z. Yang [Mon, 20 Apr 2015 21:02:36 +0000 (14:02 -0700)] 
Give a hint when a TH splice has a bad package key, partially fixes #10279

Previously, if we got a package key in our splice, we'd give
a very unhelpful error message saying we couldn't find
a package 'base-4.7.0.1', despite there being a package with
that source package ID.  Really, we couldn't find a package with
that *key*, so clarify, and also tell the user what the real
package key is.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
(cherry picked from commit bf4f3e653407d02593a69618fb199b2e2d529c92)

4 years agoDetabify a programlisting in the User's Guide (#10425)
Reid Barton [Tue, 2 Jun 2015 20:00:10 +0000 (16:00 -0400)] 
Detabify a programlisting in the User's Guide (#10425)

(cherry picked from commit 5688053a5c0a188c8bc94cd2c41d178b5c716535)

4 years agonewTempName: Do not include pid in basename
Joachim Breitner [Tue, 2 Jun 2015 21:12:43 +0000 (16:12 -0500)] 
newTempName: Do not include pid in basename

The filename of temporary files, especially the basename of C files, can
end up in the output in some form, e.g. as part of linker debug
information. In the interest of bit-wise exactly reproducible
compilation (#4012), the basename of the temporary file no longer
contains random information (it used to ontain the process id).

This is ok, as the temporary directory used contains the pid (see
getTempDir).

This patch has been applied to the Debian package (version 7.10.1-5) and
allowed a fully bit-wise reproducible build:
https://reproducible.debian.net/rb-pkg/experimental/amd64/ghc.html

Reviewed By: austin, rwbarton

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

GHC Trac Issues: #4012

(cherry picked from commit 7a82b77691fb90c4af6863673f10e454a449739e)

4 years agoApiAnnotations : rationalise tests
Alan Zimmerman [Mon, 1 Jun 2015 09:51:27 +0000 (11:51 +0200)] 
ApiAnnotations : rationalise tests

Summary:
At the moment the API Annotations tests have a driver that has been
copy/pasted multiple times.

Compile it once, and run it for each test case.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie

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

GHC Trac Issues: #10452

(cherry picked from commit e00910b0f83eaafd91dcb59cec0779b3ea9f0d30)

4 years agocompiler: make sure we reject -O + HscInterpreted
Austin Seipp [Tue, 19 May 2015 06:56:48 +0000 (01:56 -0500)] 
compiler: make sure we reject -O + HscInterpreted

When using GHCi, we explicitly reject optimization, because the
compilers optimization passes can introduce unboxed tuples, which the
interpreter is not able to handle. But this goes the other way too: using
GHCi on optimized code may cause the optimizer to float out breakpoints
that the interpreter introduces. This manifests itself in weird ways,
particularly if you as an API client use custom DynFlags to introduce
optimization in combination with HscInterpreted.

It turns out we weren't checking for consistent DynFlag settings when
doing `setSessionDynFlags`, as #10052 showed. While the main driver
handled it in `DynFlags` via `parseDynamicFlags`, we didn't check this
elsewhere.

This does a little refactoring to split out some of the common code, and
immunizes the various `DynFlags` utilities in the `GHC` module from this
particular bug. We should probably be checking other general invariants
too.

This fixes #10052, and adds some notes about the behavior in `GHC` and
`FloatOut`

As a bonus, expose `warningMsg` from `ErrUtils` as a helper since it
didn't exist (somehow).

Signed-off-by: Austin Seipp <austin@well-typed.com>
Reviewed By: edsko

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

GHC Trac Issues: #10052

(cherry picked from commit 091944e3aec736b440a9c1204f152004e382c967)

4 years agoRename tests so that they have a unique name.
Iavor S. Diatchki [Thu, 16 Apr 2015 21:29:07 +0000 (14:29 -0700)] 
Rename tests so that they have a unique name.

(cherry picked from commit 3b90d8c8cfb4f56cec3eb5e1ede12c22a9e28d79)

4 years agoRename new T9858d to T9858e to avoid test name clash
Joachim Breitner [Wed, 22 Apr 2015 16:50:00 +0000 (18:50 +0200)] 
Rename new T9858d to T9858e to avoid test name clash

(Next time, when fixing someone else’s mistake, I really shouldn’t do
the precise same thing.)

(cherry picked from commit a55bfabbed21f17064f863450f9d94d45db9c478)

4 years agoRename new T9858c to T9858d to avoid test name clash
Joachim Breitner [Wed, 22 Apr 2015 14:18:27 +0000 (16:18 +0200)] 
Rename new T9858c to T9858d to avoid test name clash

(cherry picked from commit 43d7137399e6edcf950b3ed43b752b06ad550d2e)

4 years agotestsuite: fix some failures from merge problems
Austin Seipp [Tue, 2 Jun 2015 19:07:35 +0000 (14:07 -0500)] 
testsuite: fix some failures from merge problems

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agocompiler: kill a stray pprTrace in OccName
Austin Seipp [Sat, 23 May 2015 12:26:55 +0000 (07:26 -0500)] 
compiler: kill a stray pprTrace in OccName

Left in by c89bd681d34d, and otherwise rather annoying during the build!

Signed-off-by: Austin Seipp <austin@well-typed.com>
(cherry picked from commit 4d6c0ee11ff2c439fcd06677d55c57b8644ed7a7)

4 years agotestsuite: commit missing T4945 stdout
Austin Seipp [Sat, 23 May 2015 12:24:50 +0000 (07:24 -0500)] 
testsuite: commit missing T4945 stdout

Simon apparently forgot this it seems.

Signed-off-by: Austin Seipp <austin@well-typed.com>
(cherry picked from commit 7d519dabd2006c9742e82fce02df55704da15482)

4 years agoFix a huge space leak in the mighty Simplifier
Simon Peyton Jones [Fri, 22 May 2015 14:04:47 +0000 (15:04 +0100)] 
Fix a huge space leak in the mighty Simplifier

This long-standing, terrible, adn somewhat subtle bug was exposed
by Trac #10370, thanks to Reid Barton's brilliant test case (comment:3).

The effect is large on the Trac #10370 test.
Here is what the profile report says:

Before:
 total time  =       24.35 secs   (24353 ticks @ 1000 us, 1 processor)
 total alloc = 11,864,360,816 bytes  (excludes profiling overheads)

After:
 total time  =       21.16 secs   (21160 ticks @ 1000 us, 1 processor)
 total alloc = 7,947,141,136 bytes  (excludes profiling overheads)

The /combined/ effect of the tidyOccName fix, plus this one, is dramtic
for Trac #10370.  Here is what +RTS -s says:

Before:
  15,490,210,952 bytes allocated in the heap
   1,783,919,456 bytes maximum residency (20 sample(s))

  MUT     time   30.117s  ( 31.383s elapsed)
  GC      time   90.103s  ( 90.107s elapsed)
  Total   time  120.843s  (122.065s elapsed)

After:
   7,928,671,936 bytes allocated in the heap
      52,914,832 bytes maximum residency (25 sample(s))

  MUT     time   13.912s  ( 15.110s elapsed)
  GC      time    6.809s  (  6.808s elapsed)
  Total   time   20.789s  ( 21.954s elapsed)

- Heap allocation halved
- Residency cut by a factor of more than 30.
- ELapsed time cut by a factor of 6

Not bad!

The details
~~~~~~~~~~~
The culprit was SimplEnv.mkCoreSubst, which used mapVarEnv to do some
impedence-matching from the substitituion used by the simplifier to
the one used by CoreSubst.  But the impedence-mactching was recursive!

  mk_subst tv_env cv_env id_env
    = CoreSubst.mkSubst in_scope tv_env cv_env (mapVarEnv fiddle id_env)

  fiddle (DoneEx e)          = e
  fiddle (DoneId v)          = Var v
  fiddle (ContEx tv cv id e) = CoreSubst.substExpr (mk_subst tv cv id) e

Inside fiddle, in the ContEx case, we may do another whole level of
fiddle.  And so on.  Moreover, UniqFM (which is built on Data.IntMap) is
strict, so the fiddling is done eagerly.  I didn't wok through all the
details but the result is a gargatuan blow-up of entirely unnecessary work.

Laziness would make this go away, I think, but I don't want to mess
with IntMap.  And in any case, the impedence matching is a royal pain.

In the end I simply ceased trying to use CoreSubst.substExpr in the
simplifier, and instead just use simplExpr.  That does mean bit of
duplication; e.g.  new code for simplRules.  But it's not a big deal
and it's far more direct and easy to reason about.

A bit of knock-on refactoring:

 * Data type ArgSummary moves to CoreUnfold.

 * interestingArg moves from CoreUnfold to SimplUtils, and gets a
   SimplEnv argument which can be used when we encounter a variable.

 * simplLamBndrs, addBndrRules move from SimplEnv to Simplify
   (because they now calls simplUnfolding, simplRules resp)

 * SimplUtils.substExpr, substUnfolding, mkCoreSubst die completely

 * In Simplify some several functions that were previously pure
   substitution-based functions are now monadic:
     - addBndrRules, simplRule
     - addCoerce, add_coerce in simplCast

 * In case 2c of Simplify.rebuildCase, there was a pretty disgusting
   expression-substitution taking place for 'rhs'; and we really don't
   want to make that monadic becuase 'rhs' can be big.
   Solution: reduce the arity of the rules for seq.
   See Note [User-defined RULES for seq] in MkId.

(cherry picked from commit 45d9a15c4b85a2ed89579106bdafd84accf2cb39)

4 years agoFix quadratic behaviour in tidyOccName
Simon Peyton Jones [Fri, 22 May 2015 13:46:51 +0000 (14:46 +0100)] 
Fix quadratic behaviour in tidyOccName

In the test program from comment:3 of Trac #10370, it turned out
that 25% of all compile time was going in OccName.tidyOccName!

It was all becuase the algorithm for finding an unused OccName
had a quadratic case.

This patch fixes it.  THe effect is pretty big:

Before:
total time  =       34.30 secs   (34295 ticks @ 1000 us, 1 processor)
total alloc = 15,496,011,168 bytes  (excludes profiling overheads)

After
total time  =       25.41 secs   (25415 ticks @ 1000 us, 1 processor)
total alloc = 11,812,744,816 bytes  (excludes profiling overheads)

(cherry picked from commit c89bd681d34d3339771ebdde8aa468b1d9ab042b)

4 years agoReduce magic for seqId
Simon Peyton Jones [Fri, 22 May 2015 13:41:54 +0000 (14:41 +0100)] 
Reduce magic for seqId

An upcoming commit means that the RULES for 'seq' get only
one value arg, not two.  This patch prepares for that by

- reducing the arity of seq's built-in rule, to take one value arg
- making 'seq' not inline on the LHS of RULES
- and removing the horrid un-inlining in DsBinds.decomposeRuleLhs

(cherry picked from commit eae703aa60f41fd232be5478e196b661839ec3de)

4 years agoIn ghci linker, link against all previous temp sos (#10322)
Reid Barton [Tue, 19 May 2015 06:23:59 +0000 (01:23 -0500)] 
In ghci linker, link against all previous temp sos (#10322)

The OS X dlopen() appears to only resolve undefined symbols in
the direct dependencies of the shared library it is loading.

Reviewed By: trommler, austin

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

GHC Trac Issues: #10322

(cherry picked from commit a52f1444ea4045a2075dc88bb973a9289ee7e2cf)

4 years agoTest case for indirect dependencies in ghci linker (#10322)
Reid Barton [Wed, 15 Apr 2015 20:46:47 +0000 (16:46 -0400)] 
Test case for indirect dependencies in ghci linker (#10322)

(cherry picked from commit 88b84063c11a48820011805a8341d95f7fcd59db)

4 years agoFix dropped event registrations
Ben Gamari [Mon, 1 Jun 2015 07:27:30 +0000 (02:27 -0500)] 
Fix dropped event registrations

D347 introduced a bug wherein the event manager would drop registrations that
should be retained during processing. This occurs when an fd has multiple
registrations, not all of which fire, as well as the case of multi-shot
registrations.

I also do some general house-keeping, try to better document things, and fix a
bug which could result in unnecessary calls to `epoll_ctl`

Reviewed By: austin

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

GHC Trac Issues: #10317

(cherry picked from commit 1c3832597b3e75456fc61628c4cd289d211c733b)

4 years agorts: Fix aarch64 implementation of xchg
Erik de Castro Lopo [Thu, 28 May 2015 02:57:28 +0000 (02:57 +0000)] 
rts: Fix aarch64 implementation of xchg

In the previous implementation, the `stlxr` instruction clobbered
the value that was supposed to be returned by the the `xchg`
function.

Signed-off-by: Erik de Castro Lopo <erikd@mega-nerd.com>
Test Plan: build on aarch64

Reviewers: austin, bgamari, rwbarton

Subscribers: bgamari, thomie

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

(cherry picked from commit f6ca6959e54ede0b28735ab7e011c16b3cb172db)

4 years agocompiler/specialise: shut match_co up a bit
Austin Seipp [Mon, 1 Jun 2015 08:45:11 +0000 (03:45 -0500)] 
compiler/specialise: shut match_co up a bit

This stray pprTrace is quite annoying and makes our build logs a bit
bigger (hundreds of lines of occurrences), so we should probably just
get rid of it. Kept under DEBUG for future brave hackers.

Signed-off-by: Austin Seipp <austin@well-typed.com>
Reviewed By: thomie, nomeata

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

(cherry picked from commit f5b43ce177e40a34afb1913bc0ec866185ed95d7)

4 years agoCatch canonicalizePath exceptions, fix #10101
Flaviu Andrei Csernik (archblob) [Mon, 1 Jun 2015 07:13:36 +0000 (02:13 -0500)] 
Catch canonicalizePath exceptions, fix #10101

Summary:
Introduce by #95 'canonicalizePath' throws and exception when given
an invalid file in a call to 'sameFile'.

There are two cases when this can happen when using ghci:
  1) If there is an error at the interactive prompt, "<interactive>"
     file is searched for and not found.
  2) If there is an error in any loaded file and editing an inexistent/new
     file with 'e: foo'.

Both cases are now tested.

Test Plan: validate

Reviewers: austin, #ghc

Reviewed By: austin, #ghc

Subscribers: bgamari, thomie

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

GHC Trac Issues: #10101

(cherry picked from commit 4756438962a76d2dcedf63b90ec789cb054f9556)

4 years agoDon't assume tools are in same directory as ghc in some cases
Phil Ruffwind [Sat, 7 Mar 2015 17:04:00 +0000 (11:04 -0600)] 
Don't assume tools are in same directory as ghc in some cases

Summary: Tools such as `ghc-pkg` and `runghc` are no longer required to
be in the same directory as `ghc` when running tests, provided that
`TEST_HC` is not explicitly set and an in-tree compiler is not used.
Fixes #10126.

Reviewers: thomie, austin

Reviewed By: thomie, austin

Subscribers: thomie

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

GHC Trac Issues: #10126

(cherry picked from commit 504d8a4b183670830093a81d3c7a6d78416aed20)

4 years agobase: fix #10298 & #7695
Austin Seipp [Tue, 19 May 2015 09:56:40 +0000 (04:56 -0500)] 
base: fix #10298 & #7695

Summary:
This applies a patch from Reid Barton and Sylvain Henry, which fix a
disasterous infinite loop when iconv fails to load locale files, as
specified in #10298.

The fix is a bit of a hack but should be fine - for the actual reasoning
behind it, see `Note [Disaster and iconv]` for more info.

In addition to this fix, we also patch up the IO Encoding utilities to
recognize several variations of the 'ASCII' encoding (including its
aliases) directly so that GHC can do conversions without iconv. This
allows a static binary to sit in an initramfs.

Authored-by: Reid Barton <rwbarton@gmail.com>
Authored-by: Sylvain Henry <hsyl20@gmail.com>
Signed-off-by: Austin Seipp <austin@well-typed.com>
Test Plan: Eyeballed it.

Reviewers: rwbarton, hvr

Subscribers: bgamari, thomie

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

GHC Trac Issues: #10298, #7695

(cherry picked from commit e28462de700240288519a016d0fe44d4360d9ffd)

4 years agoApiAnnotations tweaks
Alan Zimmerman [Wed, 27 May 2015 15:50:55 +0000 (17:50 +0200)] 
ApiAnnotations tweaks

Summary:
A collection of minor updates for the API Annotations.

1. The annotations for the implicity parameter is disconnected in the
   following

    type MPI = ?mpi_secret :: MPISecret

2. In the following, the annotation for one of the commas is disconeected.

    mkPoli = mkBila . map ((,,(),,()) <$> P.base <*> P.pos <*> P.form)

3. In the following, the annotation for the parens becomes disconnected

    data MaybeDefault v where
        SetTo :: forall v . ( Eq v, Show v ) => !v -> MaybeDefault v
        SetTo4 :: forall v a. (( Eq v, Show v ) => v -> MaybeDefault v
                                                -> a -> MaybeDefault [a])

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie, mpickering

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

GHC Trac Issues: #10399

(cherry picked from commit c5911479f295242e16e396eb5d1369f2e4ce8de0)

4 years agoTestdriver: do not interfer with MinGW path magic (#10449)
Thomas Miedema [Wed, 27 May 2015 13:02:35 +0000 (15:02 +0200)] 
Testdriver: do not interfer with MinGW path magic (#10449)

This should fix the testsuite driver on Windows using the MinGW tools
with a native build of Python.

MinGW automagically converts MinGW-style paths (e.g.
'/c/programs/ghc/bin/ghc') into ordinary Windows paths (e.g.
'C:/programs/ghc/bin/ghc') when a native Windows program is invoked. But
it doesn't do so when those paths are wrapped with a pair of escaped
double quotes.

The fix is to not call `eval` on the paths in Python, which let's us use
one less pair of quotes, and makes MinGW happy.

Reviewers: Rufflewind, austin

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

(cherry picked from commit ce166a3aaab28a9b08c60da6d0cfdab998b6e8ca)

4 years agotestsuite: handle missing stats files gracefully (#10305)
Thomas Miedema [Tue, 19 May 2015 17:18:28 +0000 (19:18 +0200)] 
testsuite: handle missing stats files gracefully (#10305)

The following tests would result in framework failures when using a ghc
build with HADDOCK_DOCS=NO in mk/build.mk or mk/validate.mk:

  * haddock.Cabal
  * haddock.base
  * haddock.compiler

Test Plan: run make in tests/perf/haddock

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

(cherry picked from commit 6694ccf9444baf565eb0f38f7808767616f23825)

4 years agotestsuite: fix RnStaticPointersFail02 stderr
Austin Seipp [Wed, 27 May 2015 19:51:55 +0000 (14:51 -0500)] 
testsuite: fix RnStaticPointersFail02 stderr

Another oops moment from the 'error:' message change.

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoOmit the static form error for variables not in scope.
Facundo Domínguez [Tue, 26 May 2015 02:08:05 +0000 (21:08 -0500)] 
Omit the static form error for variables not in scope.

Summary:
Fixes T10446.

The following program

> g = static f

now produces only:

> ...: error
>    Not in scope: 'f'

Before it would also produce a complaint about 'f' not being a top-level
identifier.

Test Plan: validate

Reviewers: austin

Reviewed By: austin

Subscribers: bgamari, thomie, mboes

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

GHC Trac Issues: #10446

(cherry picked from commit 71d1f01db94dda5b8c2c367fba8cc7b115b06e95)

4 years agoFix ghci-way tests of -XStaticPointers.
Facundo Domínguez [Tue, 26 May 2015 02:07:54 +0000 (21:07 -0500)] 
Fix ghci-way tests of -XStaticPointers.

Summary: Add -fobject-code to StaticPointers tests in ghci.

Test Plan: validate

Reviewers: austin

Reviewed By: austin

Subscribers: bgamari, thomie, mboes

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

(cherry picked from commit 70f1ca431c948be468f7f9a86892fd81c8f1a64b)

4 years agoFix error messages from open(Binary)TempFileWithDefaultPermissions
Reid Barton [Tue, 19 May 2015 19:34:31 +0000 (15:34 -0400)] 
Fix error messages from open(Binary)TempFileWithDefaultPermissions

Fixes Trac #10430.

(cherry picked from commit 25d1a716395e349736994759d1fcbb3721f3ee9f)

4 years agoAdd missing name for FFI import (fixes #9950)
erdeszt [Mon, 25 May 2015 14:28:43 +0000 (16:28 +0200)] 
Add missing name for FFI import (fixes #9950)

Signed-off-by: erdeszt <erdeszt@gmail.com>
Reviewed By: bgamari, thomie

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

(cherry picked from commit 326989ed06e6ad52d1cc2307be19d21b66b95813)

4 years agoRevert "compiler: make sure we reject -O + HscInterpreted"
Austin Seipp [Fri, 22 May 2015 13:11:02 +0000 (08:11 -0500)] 
Revert "compiler: make sure we reject -O + HscInterpreted"

This reverts commit 46edc43cbe011978d903dd0b5f0ffc62c602fbaa.

This failed on master due to a buildbot wibble I haven't had time to
look into. But apparently I pushed it as an error, as it was sitting in
my tree. D'oh.

4 years agoApiAnnotatons : AnnDcolon in wrong place for PatBind
Alan Zimmerman [Thu, 21 May 2015 13:48:07 +0000 (15:48 +0200)] 
ApiAnnotatons : AnnDcolon in wrong place for PatBind

Summary:
In the following code fragment

    let ls :: Int = undefined

the `::` is attached to the ls function as a whole, rather than to the
pattern on the LHS.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie, mpickering

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

GHC Trac Issues: #10396

(cherry picked from commit c488da851c39ca202cdd056091176acbabdd7dd4)

4 years agoApiAnnotations : parens around a context with wildcard loses annotations
Alan Zimmerman [Thu, 21 May 2015 13:05:48 +0000 (15:05 +0200)] 
ApiAnnotations : parens around a context with wildcard loses annotations

Summary:
In the following code, the extra set of parens around the context end up
with detached annotations.

    {-# LANGUAGE PartialTypeSignatures #-}
    module ParensAroundContext where

    f :: ((Eq a, _)) => a -> a -> Bool
    f x y = x == y

Trac ticket #10354

It turns out it was the TupleTy that was the culprit.

This may also solve #10315

Test Plan: ./validate

Reviewers: hvr, austin, goldfire

Reviewed By: austin

Subscribers: goldfire, bgamari, thomie, mpickering

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

GHC Trac Issues: #10354, #10315

(cherry picked from commit 0df14b5db06751f817d3ba794cc74ac54519b5b8)

4 years agoApiAnnotations : AST version of nested forall loses forall annotation
Alan Zimmerman [Thu, 21 May 2015 12:13:42 +0000 (14:13 +0200)] 
ApiAnnotations : AST version of nested forall loses forall annotation

Summary:
When parsing

    {-# LANGUAGE ScopedTypeVariables #-}

    extremumNewton :: forall tag. forall tag1.
                       tag -> tag1 -> Int
    extremumNewton = undefined

the parser creates nested HsForAllTy's for the two forall statements.

These get flattened into a single one in `HsTypes.mk_forall_ty`

This patch removes the flattening, so that API Annotations are not lost in the
process.

Test Plan: ./validate

Reviewers: goldfire, austin, simonpj

Reviewed By: simonpj

Subscribers: bgamari, mpickering, thomie, goldfire

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

GHC Trac Issues: #10278, #10315, #10354, #10363

(cherry picked from commit c553e980e4a5d149af13bb705ec02819a15937ee)

Conflicts:
compiler/hsSyn/HsTypes.hs

4 years agoTurn off warnings when compiling boolFormula
Alan Zimmerman [Tue, 12 May 2015 15:04:50 +0000 (17:04 +0200)] 
Turn off warnings when compiling boolFormula

Summary:
There is a problem where harbourmaster builds complain about a bad
boolFormula.stderr

    ghc-api/annotations boolFormula [bad stderr] (normal)

The problem does not occur for a local build on my box

This patch turns off warnings for this test, to get rid of the stderr
issue.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie, hvr

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

(cherry picked from commit 6ee4b6fdfb07bb479a1a9ab3e3866ca6a6192e20)

4 years agocompiler: make sure we reject -O + HscInterpreted
Austin Seipp [Tue, 19 May 2015 06:56:48 +0000 (01:56 -0500)] 
compiler: make sure we reject -O + HscInterpreted

When using GHCi, we explicitly reject optimization, because the
compilers optimization passes can introduce unboxed tuples, which the
interpreter is not able to handle. But this goes the other way too: using
GHCi on optimized code may cause the optimizer to float out breakpoints
that the interpreter introduces. This manifests itself in weird ways,
particularly if you as an API client use custom DynFlags to introduce
optimization in combination with HscInterpreted.

It turns out we weren't checking for consistent DynFlag settings when
doing `setSessionDynFlags`, as #10052 showed. While the main driver
handled it in `DynFlags` via `parseDynamicFlags`, we didn't check this
elsewhere.

This does a little refactoring to split out some of the common code, and
immunizes the various `DynFlags` utilities in the `GHC` module from this
particular bug. We should probably be checking other general invariants
too.

This fixes #10052, and adds some notes about the behavior in `GHC` and
`FloatOut`

As a bonus, expose `warningMsg` from `ErrUtils` as a helper since it
didn't exist (somehow).

Signed-off-by: Austin Seipp <austin@well-typed.com>
Reviewed By: edsko

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

GHC Trac Issues: #10052

(cherry picked from commit b199536be25ea046079587933cc73d0a948a0626)

4 years agoincludes/stg/SMP.h: implement simple load_/store_load_barrier on armv6 and older
Sergei Trofimovich [Mon, 18 May 2015 21:22:18 +0000 (22:22 +0100)] 
includes/stg/SMP.h: implement simple load_/store_load_barrier on armv6 and older

Assuming there is no real SMP systems on these CPUs
I've added only compiler barrier (otherwise write_barrier
and friends need to be fixed as well).

Patch also fixes build breakage reported in #10244.

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
Reviewers: rwbarton, nomeata, austin

Reviewed By: nomeata, austin

Subscribers: bgamari, thomie

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

GHC Trac Issues: #10244

(cherry picked from commit eaaa38ba24d5152623cb202a98f71ed09deef0bb)

4 years agouser guide: correct documentation for -Wall (fixes #10386)
Alexander Eyers-Taylor [Tue, 19 May 2015 06:22:27 +0000 (01:22 -0500)] 
user guide: correct documentation for -Wall (fixes #10386)

This fixes the documentation for -Wall.
As was done previously it leaves out deprecated flags and also
fwarn-safe and fwarn-unsafe. I don't know
if that was intended or not. -fwarn-safe and fwarn-unsafe are
not mentioned on the warnings page at all instead they are
mentioned in the safe haskell section.

Reviewed By: austin

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

GHC Trac Issues: #10386

(cherry picked from commit 5cbac8866e1cf1f5a015e318bf298954b7bf6417)

4 years agoAdd regression test for #10110.
Peter Trommler [Tue, 19 May 2015 06:21:09 +0000 (01:21 -0500)] 
Add regression test for #10110.

Module C imports a from Module A and b from module B. B does not
import anything from A. So if ld is configured to drop DT_NEEDED
tags for libraries it does not depend on no DT_NEEDED tag for the
temporary shared object containing module A is recorded in the temp
SO containing module B. This leads to an undefined symbol when
linking the temp SO for module C.

Fixes #10110.

Reviewed By: austin

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

GHC Trac Issues: #10110

(cherry picked from commit 85bf9e49f5ab4e0681eeda2549dbd4b5faf3ef7f)

4 years agoCmmCommonBlockElim: Improve hash function
Joachim Breitner [Mon, 18 May 2015 08:39:54 +0000 (10:39 +0200)] 
CmmCommonBlockElim: Improve hash function

Previously, the hash function used to cut down the number of block
comparisons did not take local registers into account, causing far too
many similar, but different bocks to be considered candidates for the
(expensive!) comparision.

Adding register to the hash takes CmmCommonBlockElim's share of the
runtime of the example in #10397 from 17% to 2.5%, and eliminates all
unwanted hash collisions.

This patch also replaces the fancy trie by a plain Data.Map. It turned
out to be not performance critical, so this simplifies the code.

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

(cherry picked from commit 73f836f5d57a3106029b573c42f83d2039d21d89)

4 years agoFix superclass generation in an instance
Simon Peyton Jones [Tue, 21 Apr 2015 12:38:32 +0000 (13:38 +0100)] 
Fix superclass generation in an instance

More fallout from the silent-superclass refactoring; nothing drastic.
Fixes Trac #10335.

(cherry picked from commit 646866ff318d6eb8beeed98032644182dd9d997b)

4 years agoGreatly speed up nativeCodeGen/seqBlocks
Joachim Breitner [Sat, 16 May 2015 15:47:31 +0000 (17:47 +0200)] 
Greatly speed up nativeCodeGen/seqBlocks

When working on #10397, I noticed that "reorder" in
nativeCodeGen/seqBlocks took more than 60% of the time. With this
refactoring, it does not even show up in the profile any more. This
fixes #10422.

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

(cherry picked from commit 8e4dc8fb63b8d3bfee485c1c830776f3ed704f4d)

4 years agoSpeed up elimCommonBlocks by grouping blocks also by outgoing labels
Joachim Breitner [Fri, 15 May 2015 23:22:06 +0000 (01:22 +0200)] 
Speed up elimCommonBlocks by grouping blocks also by outgoing labels

This is an attempt to improve the situation described in #10397, where
the linear scan of possible candidates for commoning up is far too
expensive. There is (ever) more room for improvement, but this is a
start.

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

(cherry picked from commit c256357242ee2dd282fd0516260edccbb7617244)

4 years agodocs: Update 7.10.2 release notes a bit
Austin Seipp [Mon, 11 May 2015 22:59:13 +0000 (17:59 -0500)] 
docs: Update 7.10.2 release notes a bit

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoUpdate stderrs for tests after cherry pick from master
Alan Zimmerman [Mon, 11 May 2015 21:32:40 +0000 (23:32 +0200)] 
Update stderrs for tests after cherry pick from master

4 years agoApiAnnotations : PatBind gives wrong SrcSpan for the pattern.
Alan Zimmerman [Mon, 11 May 2015 15:57:05 +0000 (17:57 +0200)] 
ApiAnnotations : PatBind gives wrong SrcSpan for the pattern.

Summary:
The production for decl_no_th starts

    decl_no_th :: { Located (OrdList (LHsDecl RdrName)) }
            : sigdecl               { $1 }

            | '!' aexp rhs  {% do { let { e = sLL $1 $> (SectionR (sL1 $1 (HsVar bang_RDR)) $2) };
                                    pat <- checkPattern empty e;
    ...

The e value should be just the pattern, excluding the rhs, but the span
created includes the rhs.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie, mpickering

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

GHC Trac Issues: #10358

(cherry picked from commit ecc3d6be218b1c7a36ee3f2f36c4f3ac4f45c34f)

4 years agoApiAnnotations : pquals production adds AnnVbar in the wrong place
Alan Zimmerman [Mon, 11 May 2015 13:28:55 +0000 (15:28 +0200)] 
ApiAnnotations : pquals production adds AnnVbar in the wrong place

Summary:
The Parser.y production for pquals is

    pquals :: { Located [[LStmt RdrName (LHsExpr RdrName)]] }
        : squals '|' pquals
                         {% addAnnotation (gl $ last $ unLoc $1) AnnVbar (gl $2) >>
                            return (sLL $1 $> (reverse (unLoc $1) : unLoc $3)) }
        | squals         { L (getLoc $1) [reverse (unLoc $1)] }

The squals are returned in reverse order, so the AnnVbar should be
attached to the head of the list, not the last.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: thomie, mpickering

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

GHC Trac Issues: #10357

(cherry picked from commit fe38195eb783fc2f2f2d5ef50fb665b06fd15e82)

4 years agoApiAnnotations : BooleanFormula construction discards original
Alan Zimmerman [Mon, 11 May 2015 12:19:14 +0000 (14:19 +0200)] 
ApiAnnotations : BooleanFormula construction discards original

Summary:
The MINIMAL pragma is captured in the parser using a BooleanFormula.

The constructors (mkBool,mkAnd,mkOr) are smart and try to minimise the
boolean formula as it is constructed.

This discards the original information, making round tripping
impossible.

Note: there is another version which provides a more API Annotations
friendly version of the MINIMAL pragma, but this requires changes to
haddock, which will cause problems for 7.10.2.

See https://github.com/alanz/ghc/tree/wip/10287

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, Fuuzetsu, thomie, mpickering

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

GHC Trac Issues: #10287

(cherry picked from commit 24707d72d6137cb970878ef243c090a6bf6601e0)

4 years agoApiAnnotations : mkGadtDecl discards annotations for HsFunTy
Alan Zimmerman [Mon, 11 May 2015 08:57:25 +0000 (10:57 +0200)] 
ApiAnnotations : mkGadtDecl discards annotations for HsFunTy

Summary:
When mkGadtDecl is presented wih a HsFunTy it discards the SrcSpan, thus
disconnecting any annotations on the HsFunTy.

```
mkGadtDecl names (L ls (HsForAllTy imp Nothing qvars cxt tau))
  = return $ mk_gadt_con names
  where
    (details, res_ty)           -- See Note [Sorting out the result type]
      = case tau of
          L _ (HsFunTy (L l (HsRecTy flds)) res_ty)
                                            -> (RecCon (L l flds), res_ty)
          _other                                    -> (PrefixCon [], tau)
...
```

This can be triggered by the following

```
{-# LANGUAGE GADTs #-}
module GADTRecords2 (H1(..)) where

-- | h1
data H1 a b where
  C3 :: (Num a) => { field :: a -- ^ hello docs
                   } -> H1 Int Int
```

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie, mpickering

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

GHC Trac Issues: #10309

(cherry picked from commit e4032b1951a35d8df63a74ebfee7449988b5ef40)

4 years agoApi Annotations: RdrHsSyn.mkAtDefault causes annotations to be disconnected.
Alan Zimmerman [Mon, 11 May 2015 07:34:27 +0000 (09:34 +0200)] 
Api Annotations: RdrHsSyn.mkAtDefault causes annotations to be disconnected.

Summary:
The code for mkAtDefault is as follows.

    mkATDefault (L loc (TyFamInstDecl { tfid_eqn = L _ e }))
          | TyFamEqn { tfe_tycon = tc, tfe_pats = pats, tfe_rhs = rhs } <- e
          = do { tvs <- checkTyVars (ptext (sLit "default")) equalsDots tc (hswb_cts pats)
               ; return (L loc (TyFamEqn { tfe_tycon = tc
                                         , tfe_pats = tvs
                                         , tfe_rhs = rhs })) }

An associated type in a class of the form

    type FoldableConstraint t x = ()

has an AnnEqual attached to the location in tfid_eqn. Since the location
is discarded, this annotation is then disconnected from the AST.

Test Plan: ./validate

Reviewers: hvr, austin

Reviewed By: austin

Subscribers: bgamari, thomie, mpickering

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

GHC Trac Issues: #10307

(cherry picked from commit 811b72adedcd12149783eac19ebccff1dd72bc1c)

Conflicts:
compiler/parser/Parser.y

4 years agoFix more merge-o's from earlier cherry-picks
Austin Seipp [Mon, 11 May 2015 22:29:03 +0000 (17:29 -0500)] 
Fix more merge-o's from earlier cherry-picks

Some error message wibbles that are to be expected.

(The 'error:' prefix thing is getting slightly annoying now, but should
be fixable by cherry picking the needed testsuite driver patch...)

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoTest Trac #9858 comment:101
Simon Peyton Jones [Wed, 22 Apr 2015 13:18:56 +0000 (14:18 +0100)] 
Test Trac #9858 comment:101

(cherry picked from commit 932f08677ca07f1793398e4c3456b81359728483)

4 years agoDo not decompose => (Trac #9858)
Simon Peyton Jones [Wed, 22 Apr 2015 08:45:52 +0000 (09:45 +0100)] 
Do not decompose => (Trac #9858)

We really don't want to unify (a b) with (Eq a => ty).
The ever-ingenious Oerjan discovered this problem;
see comment:101 in Trac #9858.

See Note [Decomposing fat arrow c=>t] in Type.hs

(cherry picked from commit c0b5adbd1a04dd1c7916c1240e50a936e826136d)

4 years agoFixes (hopefully!) T9858
Iavor S. Diatchki [Thu, 16 Apr 2015 18:13:24 +0000 (11:13 -0700)] 
Fixes (hopefully!) T9858

The changes are:
  1. No impredicative types in `Typeable`
  2. Distinguish normal tuples, from tuples of constraints.

(cherry picked from commit d8d541d85defcf3bbbddaeee8cfac70b74f47ffc)

4 years agoDo not allow Typeable on constraints (Trac #9858)
Simon Peyton Jones [Tue, 14 Apr 2015 14:39:01 +0000 (15:39 +0100)] 
Do not allow Typeable on constraints (Trac #9858)

The astonishingly-ingenious trio of
Shachaf Ben-Kiki, Ørjan Johansen and Nathan van Doorn
managed to persuade GHC 7.10.1 to cough up unsafeCoerce.

That is very bad. This patch fixes it by no allowing Typable
on Constraint-kinded things.  And that seems right, since
it is, in effect, a form of impredicative polymorphism,
which Typeable definitely doesn't support.

We may want to creep back in the direction of allowing
Typeable on constraints one day, but this is a good
fix for now, and closes a terrible hole.

(cherry picked from commit 7b042d5adabdb0fc06286db1a7f9cbf1e9fd1fbf)

4 years agohaddock: update submodule
Austin Seipp [Mon, 11 May 2015 11:37:02 +0000 (06:37 -0500)] 
haddock: update submodule

This should fix #10206, and also updates Haddock to a newer release with
several other bugfixes.

Signed-off-by: Austin Seipp <austin@well-typed.com>
4 years agoFix merge-o in testsuite output that I missed
Austin Seipp [Mon, 11 May 2015 11:03:43 +0000 (06:03 -0500)] 
Fix merge-o in testsuite output that I missed

Signed-off-by: Austin Seipp <austin@well-typed.com>