ghc.git
4 months agoHadrian: Drop remaining symlink traversal code from build scripts wip/andrey/drop-symlink-traversal
Andrey Mokhov [Wed, 6 Mar 2019 13:42:27 +0000 (13:42 +0000)] 
Hadrian: Drop remaining symlink traversal code from build scripts

This partly resolves #16325 (https://ghc.haskell.org/trac/ghc/ticket/16325).

As previously discussed in https://github.com/snowleopard/hadrian/issues/667,
we do not need the symlink traversal code in build scripts. However, it
appears we forgot to delete this code from our Stack-based build scripts,
which led to placing all build artefacts in an unexpected location when
using Hadrian in combination with symlink trees. This commit fixes this.

4 months agoAdd regression test for #15918
Ryan Scott [Tue, 5 Mar 2019 10:58:29 +0000 (05:58 -0500)] 
Add regression test for #15918

The test case in #15918 no longer triggers an `ASSERT` failure on
GHC HEAD, likely due to commit
682783828275cca5fd8bf5be5b52054c75e0e22c (`Make a smart mkAppTyM`).
This patch adds a regression test for #15918 to finally put it to
rest.

4 months agorts/Printer: Print forwarding pointers
Ömer Sinan Ağacan [Tue, 5 Feb 2019 05:39:03 +0000 (00:39 -0500)] 
rts/Printer: Print forwarding pointers

4 months agorts/Printer: Introduce a few more printing utilities
Ömer Sinan Ağacan [Tue, 5 Feb 2019 05:37:57 +0000 (00:37 -0500)] 
rts/Printer: Introduce a few more printing utilities

These include printLargeAndPinnedObjects, printWeakLists, and
printStaticObjects. These are generally useful things to have.

4 months agoRip out object splitting
Ben Gamari [Mon, 26 Nov 2018 22:21:12 +0000 (17:21 -0500)] 
Rip out object splitting

The splitter is an evil Perl script that processes assembler code.
Its job can be done better by the linker's --gc-sections flag. GHC
passes this flag to the linker whenever -split-sections is passed on
the command line.

This is based on @DemiMarie's D2768.

Fixes Trac #11315
Fixes Trac #9832
Fixes Trac #8964
Fixes Trac #8685
Fixes Trac #8629

4 months agoFix map/coerce rule for newtypes with wrappers
Krzysztof Gogolewski [Tue, 26 Feb 2019 16:22:28 +0000 (17:22 +0100)] 
Fix map/coerce rule for newtypes with wrappers

This addresses Trac #16208 by marking newtype wrapper
unfoldings as compulsory.

Furthermore, we can remove the special case for newtypes
in exprIsConApp_maybe (introduced in 7833cf407d1f).

4 months agoTest Runner: don't show missing baseline warning for performance tests with expected...
David Eichmann [Mon, 25 Feb 2019 16:21:33 +0000 (16:21 +0000)] 
Test Runner: don't show missing baseline warning for performance tests with expected changes on the current commit.

Trac #16359

4 months agoBe more careful when naming TyCon binders
Simon Peyton Jones [Mon, 25 Feb 2019 08:31:33 +0000 (08:31 +0000)] 
Be more careful when naming TyCon binders

This patch fixes two rather gnarly test cases:
  * Trac #16342 (mutual recursion)
    See Note [Tricky scoping in generaliseTcTyCon]

  * Trac #16221 (shadowing)
    See Note [Unification variables need fresh Names]

The main changes are:

* Substantial reworking of TcTyClsDecls.generaliseTcTyCon
  This is the big change, and involves the rather tricky
  function TcHsSyn.zonkRecTyVarBndrs.

  See Note [Inferring kinds for type declarations] and
  Note [Tricky scoping in generaliseTcTyCon] for the details.

* bindExplicitTKBndrs_Tv and bindImplicitTKBndrs_Tv both now
  allocate /freshly-named/ unification variables. Indeed, more
  generally, unification variables are always fresh; see
  Note [Unification variables need fresh Names] in TcMType

* Clarify the role of tcTyConScopedTyVars.
  See Note [Scoped tyvars in a TcTyCon] in TyCon

As usual, this dragged in some more refactoring:

* Renamed TcMType.zonkTyCoVarBndr to zonkAndSkolemise

* I renamed checkValidTelescope to checkTyConTelescope;
  it's only used on TyCons, and indeed takes a TyCon as argument.

* I folded the slightly-mysterious reportFloatingKvs into
  checkTyConTelescope. (Previously all its calls immediately
  followed a call to checkTyConTelescope.)  It makes much more
  sense there.

* I inlined some called-once functions to simplify
  checkValidTyFamEqn. It's less spaghetti-like now.

* This patch also fixes Trac #16251.  I'm not quite sure why #16251
  went wrong in the first place, nor how this patch fixes it, but
  hey, it's good, and life is short.

4 months agoRevert "compiler: Write .o files atomically. See #14533"
Ben Gamari [Sun, 3 Mar 2019 05:16:08 +0000 (00:16 -0500)] 
Revert "compiler: Write .o files atomically. See #14533"

This reverts commit 0e2d300a59b1b5c167d2e7d99a448c8663ba6d7d.

4 months agoRevert "compiler: Refactor: extract `withAtomicRename`"
Ben Gamari [Sun, 3 Mar 2019 05:16:00 +0000 (00:16 -0500)] 
Revert "compiler: Refactor: extract `withAtomicRename`"

This reverts commit e8a08f400744a860d1366c6680c8419d30f7cc2a.

4 months agoHadrian: track mingw, ship it in bindists, more robust install script
Alp Mestanogullari [Thu, 28 Feb 2019 14:20:14 +0000 (15:20 +0100)] 
Hadrian: track mingw, ship it in bindists, more robust install script

4 months agoDon't leave .hi files after running Haddock tests
Alec Theriault [Thu, 28 Feb 2019 13:45:24 +0000 (05:45 -0800)] 
Don't leave .hi files after running Haddock tests

RyanGlScott observed in https://github.com/haskell/haddock/issues/1030
that running Haddock tests in GHC's testsuite left some `.hi` files
around in `utils/haddock`. This should fix that problem.

4 months agodetect 'autoreconf' path during configure, and use it in hadrian
Alp Mestanogullari [Tue, 26 Feb 2019 10:21:55 +0000 (11:21 +0100)] 
detect 'autoreconf' path during configure, and use it in hadrian

4 months agogitlab-ci: A bit of reorganization
Ben Gamari [Fri, 1 Mar 2019 15:54:02 +0000 (10:54 -0500)] 
gitlab-ci: A bit of reorganization

4 months agogitlab-ci: Give deb9-unreg job a distinct cache key
Ben Gamari [Thu, 21 Feb 2019 15:51:19 +0000 (10:51 -0500)] 
gitlab-ci: Give deb9-unreg job a distinct cache key

4 months agotestsuite: Suppress ticks when comparing -ddump-simpl output
Ben Gamari [Sun, 24 Feb 2019 05:02:11 +0000 (00:02 -0500)] 
testsuite: Suppress ticks when comparing -ddump-simpl output

Otherwise these tests break spuriously when core libraries are compiled
with source notes.

4 months agogitlab-ci: Produce DWARF-enabled binary distribution
Ben Gamari [Tue, 19 Feb 2019 16:40:40 +0000 (11:40 -0500)] 
gitlab-ci: Produce DWARF-enabled binary distribution

4 months agoDrop Docker images
Ben Gamari [Fri, 22 Feb 2019 22:04:27 +0000 (17:04 -0500)] 
Drop Docker images

These have been moved to the ghc/ci-images project.

4 months agogitlab-ci: Pull docker images from ghc/ci-images registry
Ben Gamari [Fri, 22 Feb 2019 19:52:50 +0000 (14:52 -0500)] 
gitlab-ci: Pull docker images from ghc/ci-images registry

4 months agoFix parsing of expected performance changes for tests with non-alpha characters.
David Eichmann [Wed, 27 Feb 2019 18:35:15 +0000 (18:35 +0000)] 
Fix parsing of expected performance changes for tests with non-alpha characters.

Python's split() function is used to split on all white space.

4 months agouse --docs=no-sphinx in both Hadrian CI jobs
Alp Mestanogullari [Wed, 27 Feb 2019 16:41:10 +0000 (17:41 +0100)] 
use --docs=no-sphinx in both Hadrian CI jobs

4 months agoHadrian: introduce ways to skip some documentation targets
Alp Mestanogullari [Wed, 27 Feb 2019 16:23:48 +0000 (17:23 +0100)] 
Hadrian: introduce ways to skip some documentation targets

The initial motivation for this is to have a chance to run the binary
distribution rules in our Windows CI without having to install
sphinx-build and xelatex there, while retaining the ability to
generate haddocks. I just ended up extending this idea a little bit so
as to have control over whether we build haddocks, (sphinx) HTML manuals,
(sphinx) PDF manuals and (sphinx) manpages.

4 months agoLexer: turn some fatal errors into non-fatal ones
Alec Theriault [Tue, 26 Feb 2019 00:39:27 +0000 (16:39 -0800)] 
Lexer: turn some fatal errors into non-fatal ones

The following previously fatal lexer errors are now non-fatal:

  * errors about enabling `LambdaCase`
  * errors about enabling `NumericUnderscores`
  * errors about having valid characters in primitive strings

See #16270

4 months agoVisible dependent quantification
Ryan Scott [Tue, 18 Dec 2018 01:54:36 +0000 (20:54 -0500)] 
Visible dependent quantification

This implements GHC proposal 35
(https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0035-forall-arrow.rst)
by adding the ability to write kinds with
visible dependent quantification (VDQ).

Most of the work for supporting VDQ was actually done _before_ this
patch. That is, GHC has been able to reason about kinds with VDQ for
some time, but it lacked the ability to let programmers directly
write these kinds in the source syntax. This patch is primarly about
exposing this ability, by:

* Changing `HsForAllTy` to add an additional field of type
  `ForallVisFlag` to distinguish between invisible `forall`s (i.e,
  with dots) and visible `forall`s (i.e., with arrows)
* Changing `Parser.y` accordingly

The rest of the patch mostly concerns adding validity checking to
ensure that VDQ is never used in the type of a term (as permitting
this would require full-spectrum dependent types). This is
accomplished by:

* Adding a `vdqAllowed` predicate to `TcValidity`.
* Introducing `splitLHsSigmaTyInvis`, a variant of `splitLHsSigmaTy`
  that only splits invisible `forall`s. This function is used in
  certain places (e.g., in instance declarations) to ensure that GHC
  doesn't try to split visible `forall`s (e.g., if it tried splitting
  `instance forall a -> Show (Blah a)`, then GHC would mistakenly
  allow that declaration!)

This also updates Template Haskell by introducing a new `ForallVisT`
constructor to `Type`.

Fixes #16326. Also fixes #15658 by documenting this feature in the
users' guide.

4 months agoCleanup iserv/iserv-proxy
Moritz Angermann [Wed, 30 Jan 2019 01:47:20 +0000 (09:47 +0800)] 
Cleanup iserv/iserv-proxy

This adds trace messages that include the processes name and as such
make debugging and following the communication easier.

It also adds a note regarding the fwd*Call proxy-communication logic
between the proxy and the slave.

The proxy will now also poll for 60s to wait for the remote iserv
to come up. (Alternatively you can start the remote process
beforehand; and just have iserv-proxy connect to it)

4 months agoFix intermittent hie002 failure
Vladislav Zavialov [Tue, 26 Feb 2019 13:54:07 +0000 (16:54 +0300)] 
Fix intermittent hie002 failure

hie002 is a performance test that used to fail unpredictably:

max_bytes_used Decrease from x86_64-linux-deb9-debug baseline @ HEAD~2:
    Expected    hie002 (normal) max_bytes_used: 1190923992.0 +/-20%
    Lower bound hie002 (normal) max_bytes_used:    952739193
    Upper bound hie002 (normal) max_bytes_used:   1429108791
    Actual      hie002 (normal) max_bytes_used:    726270784
    Deviation   hie002 (normal) max_bytes_used:        -39.0 %
peak_megabytes_allocated Decrease from x86_64-linux-deb9-debug baseline @ HEAD~2:
    Expected    hie002 (normal) peak_megabytes_allocated: 2538.0 +/-20%
    Lower bound hie002 (normal) peak_megabytes_allocated:   2030
    Upper bound hie002 (normal) peak_megabytes_allocated:   3046
    Actual      hie002 (normal) peak_megabytes_allocated:   1587
    Deviation   hie002 (normal) peak_megabytes_allocated:  -37.5 %
*** unexpected stat test failure for hie002(normal)

'max_bytes_used' and 'peak_megabytes_allocated' are too unstable without careful
control of the runtime configuration. We fix this by using a more predictable
metric, 'bytes allocated'.

4 months agoRTS: Add missing memory barrier
Peter Trommler [Sun, 24 Feb 2019 16:11:00 +0000 (17:11 +0100)] 
RTS: Add missing memory barrier

In the work stealing queue a load-load-barrier is required to ensure
that a read of queue data cannot be reordered before a read of the
bottom pointer into the queue.

The added load-load-barrier ensures that the ordering of writes enforced
at the end of `pushWSDeque` is also respected in the order of reads in
`stealWSDeque_`. In other words, when reading `q->bottom` we want to make
sure that we see the updates to `q->elements`.

Fixes #13633

4 months agoTreat kind/type variables identically, demolish FKTV
Vladislav Zavialov [Wed, 13 Feb 2019 14:15:49 +0000 (17:15 +0300)] 
Treat kind/type variables identically, demolish FKTV

Implements GHC Proposal #24: .../ghc-proposals/blob/master/proposals/0024-no-kind-vars.rst
Fixes Trac #16334, Trac #16315

With this patch, scoping rules for type and kind variables have been
unified: kind variables no longer receieve special treatment. This
simplifies both the language and the implementation.

User-facing changes
-------------------

* Kind variables are no longer implicitly quantified when an explicit
  forall is used:

    p ::             Proxy (a :: k)    -- still accepted
    p :: forall k a. Proxy (a :: k)    -- still accepted
    p :: forall   a. Proxy (a :: k)    -- no longer accepted

  In other words, now we adhere to the "forall-or-nothing" rule more
  strictly.

  Related function: RnTypes.rnImplicitBndrs

* The -Wimplicit-kind-vars warning has been deprecated.

* Kind variables are no longer implicitly quantified in constructor
  declarations:

    data T a        = T1 (S (a :: k) | forall (b::k). T2 (S b)  -- no longer accepted
    data T (a :: k) = T1 (S (a :: k) | forall (b::k). T2 (S b)  -- still accepted

  Related function: RnTypes.extractRdrKindSigVars

* Implicitly quantified kind variables are no longer put in front of
  other variables:

    f :: Proxy (a :: k) -> Proxy (b :: j)

    f :: forall k j (a :: k) (b :: j). Proxy a -> Proxy b   -- old order
    f :: forall k (a :: k) j (b :: j). Proxy a -> Proxy b   -- new order

  This is a breaking change for users of TypeApplications. Note that
  we still respect the dpendency order: 'k' before 'a', 'j' before 'b'.
  See "Ordering of specified variables" in the User's Guide.

  Related function: RnTypes.rnImplicitBndrs

* In type synonyms and type family equations, free variables on the RHS
  are no longer implicitly quantified unless used in an outermost kind
  annotation:

    type T = Just (Nothing :: Maybe a)         -- no longer accepted
    type T = Just Nothing :: Maybe (Maybe a)   -- still accepted

  The latter form is a workaround due to temporary lack of an explicit
  quantification method. Ideally, we would write something along these
  lines:

    type T @a = Just (Nothing :: Maybe a)

  Related function: RnTypes.extractHsTyRdrTyVarsKindVars

* Named wildcards in kinds are fixed (Trac #16334):

    x :: (Int :: _t)    -- this compiles, infers (_t ~ Type)

  Related function: RnTypes.partition_nwcs

Implementation notes
--------------------

* One of the key changes is the removal of FKTV in RnTypes:

  - data FreeKiTyVars = FKTV { fktv_kis    :: [Located RdrName]
  -                          , fktv_tys    :: [Located RdrName] }
  + type FreeKiTyVars = [Located RdrName]

  We used to keep track of type and kind variables separately, but
  now that they are on equal footing when it comes to scoping, we
  can put them in the same list.

* extract_lty and family are no longer parametrized by TypeOrKind,
  as we now do not distinguish kind variables from type variables.

* PatSynExPE and the related Note [Pattern synonym existentials do not scope]
  have been removed (Trac #16315). With no implicit kind quantification,
  we can no longer trigger the error.

* reportFloatingKvs and the related Note [Free-floating kind vars]
  have been removed. With no implicit kind quantification,
  we can no longer trigger the error.

4 months agoSkip T3424 when fast()
Vladislav Zavialov [Tue, 26 Feb 2019 05:32:48 +0000 (08:32 +0300)] 
Skip T3424 when fast()

14586f5d removed this by accident.

4 months agoFix the ghci063 test on Darwin (Trac #16201)
Vladislav Zavialov [Sun, 24 Feb 2019 22:23:42 +0000 (01:23 +0300)] 
Fix the ghci063 test on Darwin (Trac #16201)

We use "touch -r" to set modification timestamps, which leads to precision loss
on Darwin. For example,

   before: 2019-02-25 01:11:23.807627350 +0300
   after:  2019-02-25 01:11:23.807627000 +0300
                                     ^^^
This means we can't trick GHCi into thinking the file hasn't been changed by
restoring its old timestamp, as we cannot faithfully restore all digits.

The solution is to nullify the insignificant digits before the first :load

4 months agoDisable fragile test cases: T14697 T5559 T3424
Vladislav Zavialov [Sat, 23 Feb 2019 22:03:35 +0000 (01:03 +0300)] 
Disable fragile test cases: T14697 T5559 T3424

See Trac #15072, Trac #16349, Trac #16350

4 months agobase: Allow fusion for zip7 and related
Alexandre [Thu, 21 Feb 2019 08:19:43 +0000 (08:19 +0000)] 
base: Allow fusion for zip7 and related

Fixes #14037.

Metric Decrease:
    T9872b
    T9872d

Reviewers: bgamari, simonpj, hvr

Reviewed By: simonpj

Subscribers: AndreasK, simonpj, osa1, dfeuer, rwbarton, carter

GHC Trac Issues: #14037

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

4 months agotestsuite: Fix whitespace in hp2ps error message
Ben Gamari [Fri, 22 Feb 2019 17:29:35 +0000 (12:29 -0500)] 
testsuite: Fix whitespace in hp2ps error message

4 months agoUser's Guide: forall is a keyword nowadays
Vladislav Zavialov [Fri, 22 Feb 2019 13:51:48 +0000 (16:51 +0300)] 
User's Guide: forall is a keyword nowadays

4 months agoUser's Guide: update info on kind inference
Vladislav Zavialov [Fri, 22 Feb 2019 12:49:20 +0000 (15:49 +0300)] 
User's Guide: update info on kind inference

We no longer put class variables in front,
see "Taming the Kind Inference Monster"

(also fix some markup issues)

4 months agoInclude closure header size in StgLamLift's estimations
Sebastian Graf [Thu, 21 Feb 2019 15:02:38 +0000 (16:02 +0100)] 
Include closure header size in StgLamLift's estimations

While playing around with late lambda lifting, I realised that
StgLamLift.Analysis doesn't consider the removed closure header in its
allocation estimations.

That's because contrary to what I thought, the total word count returned
by `mkVirtHeapOffsets` doesn't include the size of the closure header.

We just add the header size manually now.

4 months agogitlab-ci: Only build x86_64-deb8 and fedora27 for releases
Ben Gamari [Thu, 21 Feb 2019 06:14:10 +0000 (01:14 -0500)] 
gitlab-ci: Only build x86_64-deb8 and fedora27 for releases

These are largely redundant as they are covered by x86_64-deb9.

4 months agoExit with exit code 1 when tests unexpectedly pass
Matthew Pickering [Tue, 19 Feb 2019 20:23:48 +0000 (20:23 +0000)] 
Exit with exit code 1 when tests unexpectedly pass

This was causing gitlab to not report from builds as failing. It also
highlighted a problem with the LLVM tests where some of the external
interpreter tests are failing.

4 months agoFix regression incorrectly advertising TH support
Herbert Valerio Riedel [Sat, 16 Feb 2019 21:08:46 +0000 (22:08 +0100)] 
Fix regression incorrectly advertising TH support

`--supported-languages` must only advertise language extensions
which are supported by the compiler in order for tooling such
as Cabal relying on this signalling not to behave incorrectly.

Fixes #16331

4 months agoExpression/command ambiguity resolution
Vladislav Zavialov [Fri, 1 Feb 2019 17:03:54 +0000 (20:03 +0300)] 
Expression/command ambiguity resolution

This patch removes 'HsArrApp' and 'HsArrForm' from 'HsExpr' by
introducing a new ambiguity resolution system in the parser.

Problem: there are places in the grammar where we do not know whether we
are parsing an expression or a command:

proc x -> do { (stuff) -< x }   -- 'stuff' is an expression
proc x -> do { (stuff) }        -- 'stuff' is a command

Until we encounter arrow syntax (-<) we don't know whether to parse
'stuff' as an expression or a command.

The old solution was to parse as HsExpr always, and rejig later:

checkCommand :: LHsExpr GhcPs -> P (LHsCmd GhcPs)

This meant polluting 'HsExpr' with command-related constructors. In
other words, limitations of the parser were affecting the AST, and
all other code (the renamer, the typechecker) had to deal with these
extra constructors by panicking.

We fix this abstraction leak by parsing into an intermediate
representation, 'ExpCmd':

data ExpCmdG b where
  ExpG :: ExpCmdG HsExpr
  CmdG :: ExpCmdG HsCmd

type ExpCmd = forall b. ExpCmdG b -> PV (Located (b GhcPs))

checkExp :: ExpCmd -> PV (LHsExpr GhcPs)
checkCmd :: ExpCmd -> PV (LHsCmd GhcPs)
checkExp f = f ExpG  -- interpret as an expression
checkCmd f = f CmdG  -- interpret as a command

See Note [Ambiguous syntactic categories] for details.

Now the intricacies of parsing have no effect on the hsSyn AST when it
comes to the expression/command ambiguity.

Future work: apply the same principles to the expression/pattern
ambiguity.

4 months agoAdd AnonArgFlag to FunTy
Simon Peyton Jones [Fri, 15 Feb 2019 09:53:48 +0000 (09:53 +0000)] 
Add AnonArgFlag to FunTy

The big payload of this patch is:

  Add an AnonArgFlag to the FunTy constructor
  of Type, so that
    (FunTy VisArg   t1 t2) means (t1 -> t2)
    (FunTy InvisArg t1 t2) means (t1 => t2)

The big payoff is that we have a simple, local test to make
when decomposing a type, leading to many fewer calls to
isPredTy. To me the code seems a lot tidier, and probably
more efficient (isPredTy has to take the kind of the type).

See Note [Function types] in TyCoRep.

There are lots of consequences

* I made FunTy into a record, so that it'll be easier
  when we add a linearity field, something that is coming
  down the road.

* Lots of code gets touched in a routine way, simply because it
  pattern matches on FunTy.

* I wanted to make a pattern synonym for (FunTy2 arg res), which
  picks out just the argument and result type from the record. But
  alas the pattern-match overlap checker has a heart attack, and
  either reports false positives, or takes too long.  In the end
  I gave up on pattern synonyms.

  There's some commented-out code in TyCoRep that shows what I
  wanted to do.

* Much more clarity about predicate types, constraint types
  and (in particular) equality constraints in kinds.  See TyCoRep
  Note [Types for coercions, predicates, and evidence]
  and Note [Constraints in kinds].

  This made me realise that we need an AnonArgFlag on
  AnonTCB in a TyConBinder, something that was really plain
  wrong before. See TyCon Note [AnonTCB InivsArg]

* When building function types we must know whether we
  need VisArg (mkVisFunTy) or InvisArg (mkInvisFunTy).
  This turned out to be pretty easy in practice.

* Pretty-printing of types, esp in IfaceType, gets
  tidier, because we were already recording the (->)
  vs (=>) distinction in an ad-hoc way.  Death to
  IfaceFunTy.

* mkLamType needs to keep track of whether it is building
  (t1 -> t2) or (t1 => t2).  See Type
  Note [mkLamType: dictionary arguments]

Other minor stuff

* Some tidy-up in validity checking involving constraints;
  Trac #16263

4 months agoRemove bogus assertion
Simon Peyton Jones [Fri, 15 Feb 2019 09:52:53 +0000 (09:52 +0000)] 
Remove bogus assertion

Remove a bogus assertion in FamInst.newFamInst
(There is a comment to explain.)

This fixes Trac #16112.

4 months agohWaitForInput-accurate-socket test
Tom Sydney Kerckhove [Fri, 21 Dec 2018 10:35:32 +0000 (12:35 +0200)] 
hWaitForInput-accurate-socket test

4 months agoghc-in-ghci: Fix capitalization of hieFile
Ben Gamari [Thu, 21 Feb 2019 16:53:34 +0000 (11:53 -0500)] 
ghc-in-ghci: Fix capitalization of hieFile

4 months agoDrop support for i386 and PowerPC in MachO linker
Artem Pyanykh [Mon, 11 Feb 2019 11:05:23 +0000 (14:05 +0300)] 
Drop support for i386 and PowerPC in MachO linker

Some code is broken, there are no CI targets (so not obvious how to
test), and no one seems to have built GHC for any of the above
platforms in years.

4 months agoUpdate CI images to GHC-8.4.4 & cabal-install-2.4.1.0
Oleg Grenrus [Mon, 18 Feb 2019 20:44:54 +0000 (22:44 +0200)] 
Update CI images to GHC-8.4.4 & cabal-install-2.4.1.0

Use official bindists, except for Debian 9/Stretch
http://downloads.haskell.org/debian/ is used. (There are no recent
GHC/cabal-install for Debian 8/Jessie there)

Use v2-update/v2-install to install Haskell tools.

Try to unify structure of the different Dockerfiles, incl installing GHC
in one step (this will prevent sublayers from existing, making final
image slightly smaller)

4 months agoBuild and copy libffi shared libraries correctly and enable dynamically linking ghc.
David Eichmann [Tue, 15 Jan 2019 19:34:06 +0000 (12:34 -0700)] 
Build and copy libffi shared libraries correctly and enable dynamically linking ghc.

Test Plan:
Ensure build environment does NOT have a system libffi installed (you may want to use a nix environment).
Then `hadrian/build.sh -c --flavour=default`

Reviewers: bgamari

Subscribers: rwbarton, carter

GHC Trac Issues: #15837

4 months agoUse validate flavour rather than devel2 for DEBUG CI job
Matthew Pickering [Wed, 20 Feb 2019 20:42:13 +0000 (20:42 +0000)] 
Use validate flavour rather than devel2 for DEBUG CI job

This also builds stage2 with optimisations and -dcore-lint

4 months agoFix exprIsConApp_maybe
Simon Peyton Jones [Thu, 21 Feb 2019 12:03:22 +0000 (12:03 +0000)] 
Fix exprIsConApp_maybe

In this commit
   commit 7833cf407d1f608bebb1d38bb99d3035d8d735e6
   Date:   Thu Jan 24 17:58:50 2019 +0100
      Look through newtype wrappers (Trac #16254)

we made exprIsConApp_maybe quite a bit cleverer.  But I had not paid
enough attention to keeping exactly the correct substitution and
in-scope set, which led to Trac #16348.

There were several buglets (like applying the substitution twice in
exprIsConApp_maybe, but the proximate source of the bug was that we were
calling addNewInScopeIds, which deleted things from the substitution as
well as adding them to the in-scope set.  That's usually right, but not
here!

This was quite tricky to track down.  But it is nicer now.

4 months agoDon't do binder-swap for GlobalIds
Simon Peyton Jones [Thu, 21 Feb 2019 09:34:01 +0000 (09:34 +0000)] 
Don't do binder-swap for GlobalIds

This patch disables the binder-swap transformation in the
(relatively rare) case when the scrutinee is a GlobalId.
Reason: we are getting Lint errors so that GHC doesn't
even validate.  Trac #16346.

This is NOT the final solution -- it's just a stop-gap
to get us running again.

The final solution is in Trac #16296

4 months agoRemove tcTyConUserTyVars
Simon Peyton Jones [Thu, 21 Feb 2019 08:46:13 +0000 (08:46 +0000)] 
Remove tcTyConUserTyVars

The tcTyConUserTyVars field of TcTyCon was entirely unused.

This patch kills it off entirely.

4 months agoBump nofib submodule.
klebinger.andreas@gmx.at [Sun, 17 Feb 2019 23:35:01 +0000 (00:35 +0100)] 
Bump nofib submodule.

4 months agocompiler: Refactor: extract `withAtomicRename`
Niklas Hambüchen [Sun, 17 Feb 2019 20:09:29 +0000 (21:09 +0100)] 
compiler: Refactor: extract `withAtomicRename`

4 months agocompiler: Write .o files atomically. See #14533
Niklas Hambüchen [Sun, 17 Feb 2019 19:48:45 +0000 (20:48 +0100)] 
compiler: Write .o files atomically. See #14533

This issue was reproduced with, and the fix confirmed with,
the `hatrace` tool for syscall-based fault injection:

    https://github.com/nh2/hatrace

The concrete test case for GHC is at

    https://github.com/nh2/hatrace/blob/e23d35a2d2c79e8bf49e9e2266b3ff7094267f29/test/HatraceSpec.hs#L185

A previous, nondeterministic reproducer for the issue was provided by
Alexey Kuleshevich in

    https://github.com/lehins/exec-kill-loop

Signed-off-by: Niklas Hambüchen <niklas@fpcomplete.com>
Reviewed-by: Alexey Kuleshevich <alexey@fpcomplete.com>
4 months agoSet builder env
Tamar Christina [Sun, 17 Feb 2019 18:37:47 +0000 (18:37 +0000)] 
Set builder env

4 months agoTestsuite: opt-in to symlinks on Windows
Tamar Christina [Tue, 12 Feb 2019 20:51:41 +0000 (20:51 +0000)] 
Testsuite: opt-in to symlinks on Windows

4 months agoHandle the (~) type operator in 'tyconsym'
Vladislav Zavialov [Tue, 19 Feb 2019 16:44:13 +0000 (19:44 +0300)] 
Handle the (~) type operator in 'tyconsym'

By parsing '~' in 'tyconsym' instead of 'oqtycon', we
get one less shift/reduce conflict.

4 months agoDot/bang operators in export lists (Trac #16339)
Vladislav Zavialov [Tue, 19 Feb 2019 15:27:09 +0000 (18:27 +0300)] 
Dot/bang operators in export lists (Trac #16339)

The dot type operator was handled in the 'tyvarop' parser production, and the
bang type operator in 'tyapp'. However, export lists and role annotations use
'oqtycon', so these type operators could not be exported or assigned roles.

The fix is to handle them in a lower level production, 'tyconsym'.

4 months agoFix test runner crash when not in a git repo
David Eichmann [Tue, 19 Feb 2019 11:38:51 +0000 (11:38 +0000)] 
Fix test runner crash when not in a git repo

Respect `inside_git_repo()` when checking performance stats.

4 months agoText.ParserCombinators.ReadP: use NonEmpty in Final
Vaibhav Sagar [Mon, 18 Feb 2019 00:41:38 +0000 (19:41 -0500)] 
Text.ParserCombinators.ReadP: use NonEmpty in Final

The `Final` constructor needed to maintain the invariant that the list
it is provided is always non-empty. Since NonEmpty is in `base` now, I
think it would be better to use it for this purpose.

4 months agoComments only, in GhcPrelude
Simon Peyton Jones [Tue, 19 Feb 2019 08:46:34 +0000 (08:46 +0000)] 
Comments only, in GhcPrelude

4 months agoImprove the very simple optimiser slightly
Simon Peyton Jones [Mon, 18 Feb 2019 13:46:35 +0000 (13:46 +0000)] 
Improve the very simple optimiser slightly

There was a missing case in the very simple optimiser,
CoreOpt.simpleOptExpr, which led to Trac #13208 comment:2.

In particular, in simple_app, if we find a Let, we should
just float it outwards. Otherwise we leave behind some
easy-to-reduce beta-redexes.

4 months agoTiny refactor in isUnliftedRuntimeRep
Simon Peyton Jones [Mon, 18 Feb 2019 09:04:44 +0000 (09:04 +0000)] 
Tiny refactor in isUnliftedRuntimeRep

No change in behaviour, slightly more efficient

4 months agoAdd comments about how zip fusion
Simon Peyton Jones [Mon, 18 Feb 2019 09:03:01 +0000 (09:03 +0000)] 
Add comments about how zip fusion

Alexandre Balde (rockbmb) points out that the fusion technology
for foldr2, zip, zipWith, etc is undocumented.  This patch adds
comments to explain.

4 months agoTest bit-manipulating primops under respective arch flags like -msse4.2
Dmitry Ivanov [Sun, 17 Feb 2019 15:40:19 +0000 (16:40 +0100)] 
Test bit-manipulating primops under respective arch flags like -msse4.2

4 months agoBump ghc version to 8.9
Ryan Scott [Thu, 14 Feb 2019 14:12:20 +0000 (09:12 -0500)] 
Bump ghc version to 8.9

Along the way, I discovered that `template-haskell.cabal` was
hard-coding the GHC version (in the form of its `ghc-boot-th` version
bounds), so I decided to make life a little simpler in the future by
generating `template-haskell.cabal` with autoconf.

4 months agoCI: Run `cabal update` before trying to build Hadrian
Matthew Pickering [Mon, 18 Feb 2019 19:42:35 +0000 (19:42 +0000)] 
CI: Run `cabal update` before trying to build Hadrian

4 months agoHadrian: Fix untracked dependencies
Andrey Mokhov [Thu, 14 Feb 2019 14:29:50 +0000 (14:29 +0000)] 
Hadrian: Fix untracked dependencies

This is a preparation for #16295: https://ghc.haskell.org/trac/ghc/ticket/16295

This commit mostly focuses on getting rid of untracked dependencies,
which prevent Shake's new `--shared` feature from appropriately caching
build rules.

There are three different solutions to untracked dependencies:

* Track them! This is the obvious and the best approach, but in some
  situations we cannot use it, for example, because a build rule creates
  files whose names are not known statically and hence cannot be
  specified as the rule's outputs.

* Use Shake's `produces` to record outputs dynamically, within the rule.

* Use Shake's `historyDisable` to disable caching for a particular build
  rule. We currently use this approach only for `ghc-pkg` which mutates
  the package database and the file `package.cache`.

These two tickets are fixed as the result:

Ticket #16271: ​https://ghc.haskell.org/trac/ghc/ticket/16271

Ticket #16272: ​https://ghc.haskell.org/trac/ghc/ticket/16272 (this one
is fixed only partially: we correctly record the dependency, but we
still copy files into the RTS build tree).

4 months agoFix two bugs in stg_ap_0_fast in profiling runtime
Ömer Sinan Ağacan [Fri, 18 Jan 2019 19:35:37 +0000 (22:35 +0300)] 
Fix two bugs in stg_ap_0_fast in profiling runtime

This includes two bug fixes in profiling version of stg_ap_0_fast:

- PAPs allocated by stg_ap_0_fast are now correctly tagged. This
  invariant is checked in Sanity.c:checkPAP.

  (This was originally implemented in 2693eb11f5, later reverted with
  ab55b4ddb7 because it revealed the bug below, but it wasn't clear at
  the time whether the bug was the one below or something in the commit)

- The local variable `untaggedfun` is now marked as a pointer so it
  survives GC.

With this we finally fix all known bugs caught in #15508. `concprog001`
now works reliably with prof+threaded and prof runtimes (with and
without -debug).

4 months agoRemove arc scripts
Ömer Sinan Ağacan [Sun, 17 Feb 2019 05:04:17 +0000 (08:04 +0300)] 
Remove arc scripts

4 months agobase: Document errno behaviour in haddocks.
Niklas Hambüchen [Thu, 14 Feb 2019 21:52:17 +0000 (16:52 -0500)] 
base: Document errno behaviour in haddocks.

Also add an implementation comment for details.

4 months agoLook through newtype wrappers (Trac #16254)
Krzysztof Gogolewski [Thu, 24 Jan 2019 16:58:50 +0000 (17:58 +0100)] 
Look through newtype wrappers (Trac #16254)

exprIsConApp_maybe could detect that I# 10 is a constructor application,
but not that Size (I# 10) is, because it was an application with a
nontrivial argument.

4 months agoMake constructor wrappers inline only during the final phase
Arnaud Spiwack [Thu, 15 Nov 2018 16:14:31 +0000 (17:14 +0100)] 
Make constructor wrappers inline only during the final phase

For case-of-known constructor to continue triggering early,
exprIsConApp_maybe is now capable of looking through lets and cases.

See #15840

4 months agoDisable binder swap in OccurAnal (Trac #16288)
Krzysztof Gogolewski [Fri, 8 Feb 2019 16:49:28 +0000 (17:49 +0100)] 
Disable binder swap in OccurAnal (Trac #16288)

4 months agoFix Haddock comment for Integer datatype
Alexandre Baldé [Thu, 7 Feb 2019 12:31:44 +0000 (12:31 +0000)] 
Fix Haddock comment for Integer datatype

Move implementation notes for Integer to Haddock named section

Revert documentation named chunk change [skip ci]

Haddock's named chunk feature was not used correctly in this case,
as it cannot export only parts of a Haddock top level comment.

As such, it was removed and replaced by a message informing the end-
user to browse the source code for detailed information.

4 months agoUphold AvailTC Invariant for associated data fams
Alec Theriault [Sat, 2 Feb 2019 00:26:43 +0000 (16:26 -0800)] 
Uphold AvailTC Invariant for associated data fams

The AvailTC was not be upheld for explicit export module
export lists when the module contains associated data families.

    module A (module A) where
    class    C a  where { data T a }
    instance C () where { data T () = D }

Used to (incorrectly) report avails as `[C{C, T;}, T{D;}]`. Note that
although `T` is exported, the avail where it is the parent does _not_
list it as its first element. This avail is now correctly listed as
`[C{C, T;}, T{T, D;}]`.

This was induces a [crash in Haddock][0].

See #16077.

[0]: https://github.com/haskell/haddock/issues/979

4 months agoFix warnings and fatal parsing errors
Vladislav Zavialov [Sat, 16 Feb 2019 00:38:21 +0000 (03:38 +0300)] 
Fix warnings and fatal parsing errors

4 months agoGet rid of tcm_smart from TyCoMapper
Simon Peyton Jones [Fri, 15 Feb 2019 09:56:06 +0000 (09:56 +0000)] 
Get rid of tcm_smart from TyCoMapper

Following a succession of refactorings of the type checker,
culminating in the patch
       Make a smart mkAppTyM
we have got rid of mkNakedAppTy etc.  And that in turn
meant that the tcm_smart field of the generic TyCoMapper
(in Type.hs) was entirely unused.  It was always set to True.

So this patch just gets rid of it completely.  Less code,
less complexity, and more efficient because fewer higher-order
function calls.  Everyone wins.

No change in behaviour; this does not cure any bugs!

4 months agoTestsuite: implement use_specs.
Tamar Christina [Sun, 27 Jan 2019 20:18:24 +0000 (20:18 +0000)] 
Testsuite: implement use_specs.

4 months agoRun some of Haddock's tests in the testsuite
Alec Theriault [Tue, 5 Feb 2019 06:06:07 +0000 (22:06 -0800)] 
Run some of Haddock's tests in the testsuite

The 4 main testsuites in Haddock don't have many dependencies, but are
regularly broken in small ways by changes to the GHC AST or the GHC API.
The main gotcha is that we'll have to make sure that `haddock-test` and
the test suite don't add modules without modifying this test. Then again,
if that happens, the test will fail and someone will noticed.

4 months agoCmm: Promote stack arguments to word size
Peter Trommler [Thu, 31 Jan 2019 08:43:08 +0000 (09:43 +0100)] 
Cmm: Promote stack arguments to word size

Smaller than word size integers must be promoted to word size
when passed on the stack. While on little endian systems we can
get away with writing a small integer to a word size stack slot
and read it as a word ignoring the upper bits, on big endian
systems a small integer write ends up in the most significant
bits and a word size read that ignores the upper bits delivers
a random value.

On little endian systems a smaller than word size write to
the stack might be more efficient but that decision is
system specific and should be done as an optimization in the
respective backends.

Fixes #16258

5 months agoHIE: Save module name and module exports
Matthew Pickering [Fri, 15 Feb 2019 10:14:29 +0000 (10:14 +0000)] 
HIE: Save module name and module exports

5 months agoRemove `parallel` as a submodule
Alec Theriault [Wed, 13 Feb 2019 15:44:58 +0000 (07:44 -0800)] 
Remove `parallel` as a submodule

`parallel` is used in exactly one place in the GHC tree: the T2317 test.
It seems almost by accident that it is a submodule; libraries needed
only for tests should net be included as submodules (see `QuickCheck`,
`async`, `haskell98`, `regex-compat`, `utf8-string`, `vector` and more
for examples).

T2317 will now get run only when `parallel` is installed instead of
`parallel` being required for the testsuite to run.

5 months agoMinor documentation fix in GHC.ForeignPtr
Ömer Sinan Ağacan [Wed, 13 Feb 2019 10:52:17 +0000 (13:52 +0300)] 
Minor documentation fix in GHC.ForeignPtr

5 months agoRemove Simon's special number from typecheck/should_fail/all.t
Matthew Pickering [Fri, 15 Feb 2019 10:30:14 +0000 (10:30 +0000)] 
Remove Simon's special number from typecheck/should_fail/all.t

5 months agoFix tests which were made to pass by "Make a smart mkAppTyM"
Matthew Pickering [Fri, 15 Feb 2019 10:26:41 +0000 (10:26 +0000)] 
Fix tests which were made to pass by "Make a smart mkAppTyM"

For some reason gitlab is not reporting these as failures in CI. It's
not clear to me why as the junit output looks fine.

Fixes #16112 and #16113

They were fixed by 682783828275cca5fd8bf5be5b52054c75e0e22c

5 months agoFix and Reapply "Performance tests: recover a baseline from ancestor commits and...
David Eichmann [Mon, 4 Feb 2019 16:51:58 +0000 (16:51 +0000)] 
Fix and Reapply "Performance tests: recover a baseline from ancestor commits and CI results."

5 months agoDon't wrap the entry map for LiveInfo in Maybe.
klebinger.andreas@gmx.at [Thu, 14 Feb 2019 18:23:19 +0000 (19:23 +0100)] 
Don't wrap the entry map for LiveInfo in Maybe.

It never really encoded a invariant.

* The linear register allocator just did partial pattern matches
* The graph allocator just set it to (Just mapEmpty) for Nothing

So I changed LiveInfo to directly contain the map.

Further natCmmTopToLive which filled in Nothing is no longer exported.
Instead we know call cmmTopLiveness which changes the type AND fills
in the map.

5 months agoProperly escape character literals in Haddocks
Alec Theriault [Wed, 13 Feb 2019 13:43:35 +0000 (08:43 -0500)] 
Properly escape character literals in Haddocks

Character literals in Haddock should not be written as plain `'\n'` since
single quotes are for linking identifiers. Besides, since we want the
character literal to be monospaced, we really should use `@\'\\n\'@`.

[skip ci]

5 months ago'forall' always a keyword, plus the dot type operator
Vladislav Zavialov [Wed, 13 Feb 2019 21:36:00 +0000 (00:36 +0300)] 
'forall' always a keyword, plus the dot type operator

5 months agoHadrian: enable -Wcompat=error in the testsuite
Vladislav Zavialov [Wed, 13 Feb 2019 12:22:59 +0000 (15:22 +0300)] 
Hadrian: enable -Wcompat=error in the testsuite

5 months agoFail fast in solveLocalEqualities
Simon Peyton Jones [Thu, 14 Feb 2019 08:28:43 +0000 (08:28 +0000)] 
Fail fast in solveLocalEqualities

This patch makes us fail fast in TcSimplify.solveLocalEqualities,
and in TcHsType.tc_hs_sig_type, if there are insoluble constraints.

Previously we ploughed on even if there were insoluble constraints,
leading to a cascade of hard-to-understand type errors. Failing
eagerly is much better; hence a lot of testsuite error message
changes.  Eg if we have
          f :: [Maybe] -> blah
          f xs = e
then trying typecheck 'f x = e' with an utterly bogus type
is just asking for trouble.

I can't quite remember what provoked me to make this change,
but I think the error messages are notably improved, by
removing confusing clutter and focusing on the real error.

5 months agoMake a smart mkAppTyM
Simon Peyton Jones [Thu, 24 Jan 2019 11:53:03 +0000 (11:53 +0000)] 
Make a smart mkAppTyM

This patch finally delivers on Trac #15952.  Specifically

* Completely remove Note [The tcType invariant], along with
  its complicated consequences (IT1-IT6).

* Replace Note [The well-kinded type invariant] with:

      Note [The Purely Kinded Type Invariant (PKTI)]

* Instead, establish the (PKTI) in TcHsType.tcInferApps,
  by using a new function mkAppTyM when building a type
  application.  See Note [mkAppTyM].

* As a result we can remove the delicate mkNakedXX functions
  entirely.  Specifically, mkNakedCastTy retained lots of
  extremly delicate Refl coercions which just cluttered
  everything up, and(worse) were very vulnerable to being
  silently eliminated by (say) substTy. This led to a
  succession of bug reports.

The result is noticeably simpler to explain, simpler
to code, and Richard and I are much more confident that
it is correct.

It does not actually fix any bugs, but it brings us closer.
E.g. I hoped it'd fix #15918 and #15799, but it doesn't quite
do so.  However, it makes it much easier to fix.

I also did a raft of other minor refactorings:

* Use tcTypeKind consistently in the type checker

* Rename tcInstTyBinders to tcInvisibleTyBinders,
  and refactor it a bit

* Refactor tcEqType, pickyEqType, tcEqTypeVis
  Simpler, probably more efficient.

* Make zonkTcType zonk TcTyCons, at least if they have
  any free unification variables -- see zonk_tc_tycon
  in TcMType.zonkTcTypeMapper.

  Not zonking these TcTyCons was actually a bug before.

* Simplify try_to_reduce_no_cache in TcFlatten (a lot)

* Combine checkExpectedKind and checkExpectedKindX.
  And then combine the invisible-binder instantation code
  Much simpler now.

* Fix a little bug in TcMType.skolemiseQuantifiedTyVar.
  I'm not sure how I came across this originally.

* Fix a little bug in TyCoRep.isUnliftedRuntimeRep
  (the ASSERT was over-zealous).  Again I'm not certain
  how I encountered this.

* Add a missing solveLocalEqualities in
  TcHsType.tcHsPartialSigType.
  I came across this when trying to get level numbers
  right.

5 months agoImplement -Wredundant-record-wildcards and -Wunused-record-wildcards
Matthew Pickering [Mon, 11 Feb 2019 09:24:04 +0000 (09:24 +0000)] 
Implement -Wredundant-record-wildcards and -Wunused-record-wildcards

-Wredundant-record-wildcards warns when a .. pattern binds no variables.

-Wunused-record-wildcards warns when none of the variables bound by a ..
pattern are used.

These flags are enabled by `-Wall`.

5 months agoNCG: fast compilation of very large strings (#16190)
Sylvain Henry [Mon, 11 Feb 2019 16:40:00 +0000 (17:40 +0100)] 
NCG: fast compilation of very large strings (#16190)

This patch adds an optimization into the NCG: for large strings
(threshold configurable via -fbinary-blob-threshold=NNN flag), instead
of printing `.asciz "..."` in the generated ASM source, we print
`.incbin "tmpXXX.dat"` and we dump the contents of the string into a
temporary "tmpXXX.dat" file.

See the note for more details.

5 months agoAdd perf test for #16190
Sylvain Henry [Mon, 11 Feb 2019 16:39:02 +0000 (17:39 +0100)] 
Add perf test for #16190

5 months agoAdd `liftedTyped` to `Lift` class
Alec Theriault [Mon, 11 Feb 2019 17:31:40 +0000 (09:31 -0800)] 
Add `liftedTyped` to `Lift` class

Implements GHC proposal 43, adding a `liftTyped` method to the `Lift` typeclass.
This also adds some documentation to `TExp`, describing typed splices and their
advantages over their untyped counterparts.

Resolves #14671.

5 months agoFix typos [skip ci]
Alexandre Esteves [Tue, 12 Feb 2019 17:17:21 +0000 (17:17 +0000)] 
Fix typos [skip ci]

5 months agoUpdate parallel submodule
Herbert Valerio Riedel [Mon, 11 Feb 2019 22:32:38 +0000 (23:32 +0100)] 
Update parallel submodule

5 months agoFix checkStackChunk() call in Interepter.c, enable an assertion
Ömer Sinan Ağacan [Mon, 11 Feb 2019 15:17:43 +0000 (18:17 +0300)] 
Fix checkStackChunk() call in Interepter.c, enable an assertion

Fixes #16303