4 months agoAdd GHCi :instances command
Xavier Denis [Fri, 19 Oct 2018 23:36:23 +0000 (01:36 +0200)] 
Add GHCi :instances command

This commit adds the `:instances` command to ghci following proosal
number 41.

This makes it possible to query which instances are available to a given

The output of this command is all the possible instances with type
variables and constraints instantiated.

4 months agoHadrian: fix OSX build failure and add an OSX/Hadrian CI job
Alp Mestanogullari [Fri, 31 May 2019 09:20:30 +0000 (11:20 +0200)] 
Hadrian: fix OSX build failure and add an OSX/Hadrian CI job

The OSX build failure introduced in 3aa71a22 was due to a change in the
glob we use to collect libffi shared libraries in hadrian/src/Rules/Libffi.hs.
This commit fixes the problem and adds an OSX CI job that builds GHC with
Hadrian, to make sure we don't break it again.

4 months agoUse a better strategy for determining the offset applied to foreign function argument...
Andrew Martin [Sat, 25 May 2019 19:36:14 +0000 (15:36 -0400)] 
Use a better strategy for determining the offset applied to foreign function arguments that have an unlifted boxed type. We used to use the type of the argument. We now use the type of the foreign function. Add a test to confirm that the roundtrip conversion between an unlifted boxed type and Any is sound in the presence of a foreign function call.

4 months agoTestRunner: Added --chart to display a chart of performance tests
David Eichmann [Mon, 20 May 2019 16:38:22 +0000 (17:38 +0100)] 
TestRunner: Added --chart to display a chart of performance tests

This uses the Chart.js javascript library.
Everything is put into a standalone .html file and opened with the
default browser.
I also simplified the text output to use the same data as the chart.
You can now use a commit range with git's ".." syntax.
The --ci option will use results from CI (you'll need to fetch them

  $ git fetch refs/notes/perf:refs/notes/ci/perf
  $ python3 testsuite/driver/ --ci --chart --test-env x86_64-darwin --test-name T9630 master~500..master

4 months agogitlab-ci: Use GHC 8.6.5 for Windows CI builds
Ben Gamari [Sun, 2 Jun 2019 14:12:20 +0000 (10:12 -0400)] 
gitlab-ci: Use GHC 8.6.5 for Windows CI builds

4 months agoAdd `-haddock` to and .gitlab-ci.yml
Takenobu Tani [Sun, 14 Apr 2019 12:31:05 +0000 (21:31 +0900)] 
Add `-haddock` to and .gitlab-ci.yml

To cover ci conditions from ghc8.6 to 8.9, I add `-haddock` option
to `.circleci/` and .gitlab-ci.yml.
after including `mk/flavours/*`.

4 months agoAdd `-haddock` to rather than
Takenobu Tani [Sun, 14 Apr 2019 10:11:12 +0000 (19:11 +0900)] 
Add `-haddock` to rather than

To cover ci conditions from ghc8.6 to 8.9, I add `-haddock` option
to `mk/flavours/` rather than `.circleci/`.

Because in windows condition of ghc-8.9, `mk/flavours/*` is included
after ``.

In addition, in linux condition of ghc-8.6, `mk/flavors/` is used.

4 months agoAdd `-haddock` option under ci condition to fix #16415
Takenobu Tani [Sat, 13 Apr 2019 06:54:43 +0000 (15:54 +0900)] 
Add `-haddock` option under ci condition to fix #16415

In order to use the `:doc` command in ghci, it is necessary
to compile for core libraries with `-haddock` option.

Especially, the `-haddock` option is essential for release building.

  * The `-haddock` option may affect compile time and binary size.
  * But hadrian has already set `-haddock` as the default.
  * This patch affects the make-based building.

This patch has been split from !532.

4 months agorts: Remove unused decls from CNF.h
Ömer Sinan Ağacan [Mon, 27 May 2019 19:50:45 +0000 (22:50 +0300)] 
rts: Remove unused decls from CNF.h

4 months agoFix rewriting invalid shifts to errors
Ömer Sinan Ağacan [Fri, 24 May 2019 08:23:01 +0000 (11:23 +0300)] 
Fix rewriting invalid shifts to errors

Fixes #16449.

5341edf3 removed a code in rewrite rules for bit shifts, which broke the
"silly shift guard", causing generating invalid bit shifts or heap
overflow in compile time while trying to evaluate those invalid bit

The "guard" is explained in Note [Guarding against silly shifts] in

More specifically, this was the breaking change:

    --- a/compiler/prelude/PrelRules.hs
    +++ b/compiler/prelude/PrelRules.hs
    @@ -474,12 +474,11 @@ shiftRule shift_op
            ; case e1 of
                _ | shift_len == 0
                  -> return e1
    -             | shift_len < 0 || wordSizeInBits dflags < shift_len
    -             -> return (mkRuntimeErrorApp rUNTIME_ERROR_ID wordPrimTy
    -                                        ("Bad shift length" ++ show shift_len))

This patch reverts this change.

Two new tests added:

- T16449_1: The original reproducer in #16449. This was previously
  casing a heap overflow in compile time when CmmOpt tries to evaluate
  the large (invalid) bit shift in compile time, using `Integer` as the
  result type. Now it builds as expected. We now generate an error for
  the shift as expected.

- T16449_2: Tests code generator for large (invalid) bit shifts.

4 months agoFix space leaks in dynLoadObjs (#16708)
Ryan Scott [Thu, 30 May 2019 15:09:13 +0000 (11:09 -0400)] 
Fix space leaks in dynLoadObjs (#16708)

When running the test suite on a GHC built with the `quick` build
flavour, `-fghci-leak-check` noticed some space leaks. Careful
investigation led to `Linker.dynLoadObjs` being the culprit.
Pattern-matching on `PeristentLinkerState` and a dash of `$!` were
sufficient to fix the issue. (ht to mpickering for his suggestions,
which were crucial to discovering a fix)

Fixes #16708.

4 months agoReject nested foralls in foreign imports (#16702)
Ryan Scott [Wed, 29 May 2019 15:52:02 +0000 (11:52 -0400)] 
Reject nested foralls in foreign imports (#16702)

This replaces a panic observed in #16702 with a simple error message
stating that nested `forall`s simply aren't allowed in the type
signature of a `foreign import` (at least, not at present).

Fixes #16702.

4 months agoImprove ThreadId Show instance
Nathan Collins [Tue, 21 May 2019 17:44:55 +0000 (13:44 -0400)] 
Improve ThreadId Show instance

By making it include parens when a derived instance would. For example, this changes the (hypothetical) code `show (Just (ThreadId 3))` to produce `"Just (ThreadId 3)"` instead of the current `"Just ThreadId 3"`.

4 months agoFix and enforce validation of header for .hie files
Zubin Duggal [Thu, 23 May 2019 11:43:33 +0000 (17:13 +0530)] 
Fix and enforce validation of header for .hie files

Implements #16686

The files version is automatically generated from the current GHC
version in the same manner as normal interface files.

This means that clients can first read the version and then decide how
to read the rest of the file.

4 months agoImplement (Functor.<$) for Data.Functor.{Compose,Product,Sum}
Simon Jakobi [Wed, 29 May 2019 15:20:41 +0000 (17:20 +0200)] 
Implement (Functor.<$) for Data.Functor.{Compose,Product,Sum}

This allows us to make use of the (<$) implementations of the
underlying functors.

4 months agoImplement (Functor.<$) for Array
Simon Jakobi [Wed, 29 May 2019 22:16:09 +0000 (00:16 +0200)] 
Implement (Functor.<$) for Array

4 months agoPut COMPLETE sigs into ModDetails with -fno-code (#16682)
Ryan Scott [Wed, 29 May 2019 16:48:50 +0000 (12:48 -0400)] 
Put COMPLETE sigs into ModDetails with -fno-code (#16682)

`mkBootModDetailsTc`, which creates a special `ModDetails` when
`-fno-code` is enabled, was not properly filling in the `COMPLETE`
signatures from the `TcGblEnv`, resulting in incorrect pattern-match
coverage warnings. Easily fixed.

Fixes #16682.

4 months agoFix arity type of coerced types in CoreArity
Ömer Sinan Ağacan [Wed, 29 May 2019 10:18:58 +0000 (13:18 +0300)] 
Fix arity type of coerced types in CoreArity

Previously if we had

    f |> co

where `f` had arity type `ABot N` and `co` had arity M and M < N,
`arityType` would return `ABot M` which is wrong, because `f` is only
known to diverge when applied to `N` args, as described in Note

    If at = ABot n, then (f x1..xn) definitely diverges. Partial
    applications to fewer than n args may *or may not* diverge.

This caused incorrect eta expansion in the simplifier, causing #16066.

We now return `ATop M` for the same expression so the simplifier can't
assume partial applications of `f |> co` is divergent.

A regression test T16066 is also added.

4 months agoRemove unused RTS function 'unmark'
Ömer Sinan Ağacan [Thu, 23 May 2019 09:16:28 +0000 (12:16 +0300)] 
Remove unused RTS function 'unmark'

4 months agoExpose doCpp
Neil Mitchell [Tue, 14 May 2019 11:41:32 +0000 (07:41 -0400)] 
Expose doCpp

4 months agosupport small arrays and CONSTR_NOCAF in ghc-heap
David Hewson [Fri, 3 May 2019 21:18:10 +0000 (22:18 +0100)] 
support small arrays and CONSTR_NOCAF in ghc-heap

4 months agoUse types already in AST when making .hie file
Matthew Pickering [Fri, 26 Apr 2019 18:55:27 +0000 (19:55 +0100)] 
Use types already in AST when making .hie file

These were meant to be added in !214 but for some reason wasn't included
in the patch.

Update Haddock submodule for new Types.hs hyperlinker output

4 months agopowerpc32: fix stack allocation code generation
Sergei Trofimovich [Wed, 20 Mar 2019 22:46:33 +0000 (22:46 +0000)] 
powerpc32: fix stack allocation code generation

When ghc was built for powerpc32 built failed as:

It's a fallout of commit 3f46cffcc2850e68405a1
("PPC NCG: Refactor stack allocation code") where
word size used to be
and changed to
    II8/panic "no width for given number of bytes"
    widthFromBytes ((platformWordSize platform) `quot` 8)

The change restores initial behaviour by removing extra division.

Signed-off-by: Sergei Trofimovich <>
4 months agopowerpc32: fix 64-bit comparison (#16465)
Sergei Trofimovich [Wed, 20 Mar 2019 22:40:28 +0000 (22:40 +0000)] 
powerpc32: fix 64-bit comparison (#16465)

On powerpc32 64-bit comparison code generated dangling
target labels. This caused ghc build failure as:

    $ ./configure --target=powerpc-unknown-linux-gnu && make
    SCCs aren't in reverse dependent order
    bad blockId n3U

This happened because condIntCode' in PPC codegen generated
label name but did not place the label into `cmp_lo` code block.

The change adds the `cmp_lo` label into the case of negative

Signed-off-by: Sergei Trofimovich <>
4 months agoUpdate `$(TOP)/*.md` documents
Takenobu Tani [Tue, 30 Apr 2019 02:23:26 +0000 (11:23 +0900)] 
Update `$(TOP)/*.md` documents

I updated the top documents to the latest status:

    - Modify Phabricator to GitLab infomation
    - Remove old Trac information
    - Add link to GitLab activity

    - Add link to hadrian wiki
    - Fix markdown format

    - Modify boot command to remove python3
    - Fix markdown format

    - Modify tarball file suffix
    - Fix markdown format

I checked the page display on the GitHub and GitLab web.

[skip ci]

4 months agoEventlog: Document the fact timestamps are nanoseconds
Matthew Pickering [Wed, 29 May 2019 16:15:48 +0000 (17:15 +0100)] 
Eventlog: Document the fact timestamps are nanoseconds

[skip ci]

4 months agotestsuite: Compile T9630 with +RTS -G1
Ben Gamari [Tue, 28 May 2019 23:17:43 +0000 (19:17 -0400)] 
testsuite: Compile T9630 with +RTS -G1

For the reasons described in Note [residency] we run programs with -G1
when we care about the max_bytes_used metric.

4 months agoImprove targetContents code docs
Daniel Gröber [Tue, 28 May 2019 13:59:26 +0000 (15:59 +0200)] 
Improve targetContents code docs

4 months agoAdd depanalPartial to make getting a partial modgraph easier
Daniel Gröber [Sun, 26 May 2019 09:28:34 +0000 (11:28 +0200)] 
Add depanalPartial to make getting a partial modgraph easier

As per @mpickering's suggestion on IRC this is to make the partial
module-graph more easily accessible for API clients which don't intend to
re-implementing depanal.

4 months agoPartialDownsweep: Add test for import errors
Daniel Gröber [Sun, 26 May 2019 09:24:47 +0000 (11:24 +0200)] 
PartialDownsweep: Add test for import errors

4 months agoCatch preprocessor errors in downsweep
Daniel Gröber [Sat, 25 May 2019 11:57:45 +0000 (13:57 +0200)] 
Catch preprocessor errors in downsweep

This changes the way preprocessor failures are presented to the
user. Previously the user would simply get an unlocated message on stderr
such as:

    `gcc' failed in phase `C pre-processor'. (Exit code: 1)

Now at the problematic source file is mentioned:

    A.hs:1:1: error:
        `gcc' failed in phase `C pre-processor'. (Exit code: 1)

This also makes live easier for GHC API clients as the preprocessor error
is now thrown as a SourceError exception.

4 months agoMake downsweep return all errors per-module instead of throwing some
Daniel Gröber [Sat, 25 May 2019 09:27:22 +0000 (11:27 +0200)] 
Make downsweep return all errors per-module instead of throwing some

This enables API clients to handle such errors instead of immideately
crashing in the face of some kinds of user errors, which is arguably quite
bad UX.

Fixes #10887

4 months agoRefactor summarise{File,Module} to extract checkSummaryTimestamp
Daniel Gröber [Fri, 24 May 2019 13:02:45 +0000 (15:02 +0200)] 
Refactor summarise{File,Module} to extract checkSummaryTimestamp

This introduces a slight change of behaviour in the interrest of keeping
the code simple: Previously summariseModule would not call
addHomeModuleToFinder for summaries that are being re-used but now we do.

We're forced to to do this in summariseFile because the file being
summarised might not even be on the regular search path! So if GHC is to
find it at all we have to pre-populate the cache with its location. For
modules however the finder cache is really just a cache so we don't have to
pre-populate it with the module's location.

As straightforward as that seems I did almost manage to introduce a bug (or
so I thought) because the call to addHomeModuleToFinder I copied from
summariseFile used to use `ms_location old_summary` instead of the
`location` argument to checkSummaryTimestamp. If this call were to
overwrite the existing entry in the cache that would have resulted in us
using the old location of any module even if it was, say, moved to a
different directory between calls to 'depanal'.

However it turns out the cache just ignores the location if the module is
already in the cache. Since summariseModule has to search for the module,
which has the side effect of populating the cache, everything would have
been fine either way.

Well I'm adding a test for this anyways: tests/depanal/OldModLocation.hs.

4 months agoRefactor summarise{File,Module} to reduce code duplication
Daniel Gröber [Fri, 24 May 2019 11:51:16 +0000 (13:51 +0200)] 
Refactor summarise{File,Module} to reduce code duplication

4 months agoRefactor downsweep to allow returning multiple errors per module
Daniel Gröber [Fri, 24 May 2019 07:57:39 +0000 (09:57 +0200)] 
Refactor downsweep to allow returning multiple errors per module

4 months agoAdd failing test for #10887
Daniel Gröber [Sat, 25 May 2019 09:42:45 +0000 (11:42 +0200)] 
Add failing test for #10887

4 months agoExport GhcMake.downsweep
Daniel Gröber [Fri, 24 May 2019 13:03:02 +0000 (15:03 +0200)] 
Export GhcMake.downsweep

This is to enable #10887 as well as to make it possible to test downsweep
on its own in the testsuite.

4 months agoApply suggestion to rts/CheckUnload.c
Trịnh Tuấn Phương [Fri, 26 Apr 2019 09:43:41 +0000 (05:43 -0400)] 
Apply suggestion to rts/CheckUnload.c

4 months agoApply suggestion to rts/CheckUnload.c
Trịnh Tuấn Phương [Fri, 26 Apr 2019 09:43:35 +0000 (05:43 -0400)] 
Apply suggestion to rts/CheckUnload.c

4 months agoUse binary search to speedup checkUnload
Phuong Trinh [Mon, 1 Apr 2019 19:05:47 +0000 (20:05 +0100)] 
Use binary search to speedup checkUnload

We are iterating through all object code for each heap objects when
checking whether object code can be unloaded. For large projects in
GHCi, this can be very expensive due to the large number of object code
that needs to be loaded/unloaded. To speed it up, this arrangess all
mapped sections of unloaded object code in a sorted array and use binary
search to check if an address location fall on them.

4 months agorts: Handle zero-sized mappings in MachO linker
Ben Gamari [Tue, 28 May 2019 13:43:36 +0000 (09:43 -0400)] 
rts: Handle zero-sized mappings in MachO linker

As noted in #16701, it is possible that we will find that an object has
no segments needing to be mapped. Previously this would result in mmap
being called for a zero-length mapping, which would fail. We now simply
skip the mmap call in this case; the rest of the logic just works.

4 months agoCODEOWNERS: Use correct username for Richard Eisenberg
Ben Gamari [Tue, 28 May 2019 01:02:16 +0000 (21:02 -0400)] 
CODEOWNERS: Use correct username for Richard Eisenberg

In !980 Richard noted that he could not approve the MR.
This mis-spelling was the reason.

[skip ci]

4 months agoHadrian: always generate the libffi dynlibs manifest with globbing
Alp Mestanogullari [Fri, 24 May 2019 16:19:22 +0000 (18:19 +0200)] 
Hadrian: always generate the libffi dynlibs manifest with globbing

Instead of trying to deduce which dynlibs are expected to be found (and then
copied to the RTS's build dir) in libffi's build directory, with some OS
specific logic, we now always just use `getDirectoryFilesIO` to look for
those dynlibs and record their names in the manifest. The previous logic
ended up causing problems on Windows, where we don't build dynlibs at all
for now but the manifest file's logic didn't take that into account because
it was only partially reproducing the criterions that determine whether or not
we will be building shared libraries.

This patch also re-enables the Hadrian/Windows CI job, which was failing to
build GHC precisely because of libffi shared libraries and the aforementionned
duplicated logic.

4 months agoHadrian: Add note about Libffi's Indicating Inputs #16653
David Eichmann [Fri, 24 May 2019 17:16:28 +0000 (18:16 +0100)] 
Hadrian: Add note about Libffi's Indicating Inputs #16653

[skip ci]

4 months agoInline `Settings` into `DynFlags`
John Ericson [Wed, 22 May 2019 03:00:27 +0000 (23:00 -0400)] 
Inline `Settings` into `DynFlags`

After the previous commit, `Settings` is just a thin wrapper around
other groups of settings. While `Settings` is used by GHC-the-executable
to initalize `DynFlags`, in principle another consumer of
GHC-the-library could initialize `DynFlags` a different way. It
therefore doesn't make sense for `DynFlags` itself (library code) to
separate the settings that typically come from `Settings` from the
settings that typically don't.

4 months agoBreak up `Settings` into smaller structs
John Ericson [Wed, 22 May 2019 03:00:27 +0000 (23:00 -0400)] 
Break up `Settings` into smaller structs

As far as I can tell, the fields within `Settings` aren't *intrinsicly*
related. They just happen to be initialized the same way (in particular
prior to the rest of `DynFlags`), and that is why they are grouped

Within `Settings`, however, there are groups of settings that clearly do
share something in common, regardless of how they anything is

In the spirit of GHC being a library, where the end cosumer may choose
to initialize this configuration in arbitrary ways, I made some new data
types for thoses groups internal to `Settings`, and used them to define
`Settings` instead. Hopefully this is a baby step towards a general
decoupling of the stateful and stateless parts of GHC.

4 months agoProvide details in `plusSimplCount` errors
Josh Meredith [Tue, 28 May 2019 11:15:56 +0000 (21:15 +1000)] 
Provide details in `plusSimplCount` errors

4 months agotcMatchesFun s/rho/sigma #16692
Vladislav Zavialov [Sun, 26 May 2019 11:21:19 +0000 (14:21 +0300)] 
tcMatchesFun s/rho/sigma #16692

4 months agoCNF.c: Move debug functions behind ifdef
Ömer Sinan Ağacan [Tue, 28 May 2019 07:46:41 +0000 (10:46 +0300)] 
CNF.c: Move debug functions behind ifdef

4 months agodownsweep: Allow TargetFile not to exist when a buffer is given
Daniel Gröber [Mon, 20 May 2019 10:17:36 +0000 (12:17 +0200)] 
downsweep: Allow TargetFile not to exist when a buffer is given

Currently 'getRootSummary' will fail with an exception if a 'TargetFile' is
given but it does not exist even if an input buffer is passed along for
this target.

In this case it is not necessary for the file to exist since the buffer
will be used as input for the compilation pipeline instead of the file

4 months agoAllow using tagetContents for modules needing preprocessing
Daniel Gröber [Mon, 20 May 2019 09:58:55 +0000 (11:58 +0200)] 
Allow using tagetContents for modules needing preprocessing

This allows GHC API clients, most notably tooling such as
Haskell-IDE-Engine, to pass unsaved files to GHC more easily.

Currently when targetContents is used but the module requires preprocessing
'preprocessFile' simply throws an error because the pipeline does not
support passing a buffer.

This change extends `runPipeline` to allow passing the input buffer into
the pipeline. Before proceeding with the actual pipeline loop the input
buffer is immediately written out to a new tempfile.

I briefly considered refactoring the pipeline at large to pass around
in-memory buffers instead of files, but this seems needlessly complicated
since no pipeline stages other than Hsc could really support this at the

4 months agoAdd hPutStringBuffer utility
Daniel Gröber [Mon, 20 May 2019 04:03:49 +0000 (06:03 +0200)] 
Add hPutStringBuffer utility

4 months agoDon't lose parentheses in show SomeAsyncException
Nathan Collins [Tue, 21 May 2019 17:35:58 +0000 (13:35 -0400)] 
Don't lose parentheses in show SomeAsyncException

4 months agoFix missing unboxed tuple RuntimeReps (#16565)
Krzysztof Gogolewski [Sun, 5 May 2019 18:37:31 +0000 (20:37 +0200)] 
Fix missing unboxed tuple RuntimeReps (#16565)

Unboxed tuples and sums take extra RuntimeRep arguments,
which must be manually passed in a few places.
This was not done in deSugar/Check.

This error was hidden because zipping functions in TyCoRep
ignored lists with mismatching length. This is now fixed;
the lengths are now checked by calling zipEqual.

As suggested in #16565, I moved checking for isTyVar and
isCoVar to zipTyEnv and zipCoEnv.

4 months agoIn hole fits, don't show VTA for inferred variables (#16456)
Krzysztof Gogolewski [Thu, 16 May 2019 17:41:46 +0000 (19:41 +0200)] 
In hole fits, don't show VTA for inferred variables (#16456)

We fetch the ArgFlag for every argument by using splitForAllVarBndrs
instead of splitForAllTys in unwrapTypeVars.

4 months agoAdd test for old issue displaying unboxed tuples in error messages (#502)
Kevin Buhr [Fri, 10 May 2019 02:46:48 +0000 (21:46 -0500)] 
Add test for old issue displaying unboxed tuples in error messages (#502)

4 months agoFix some warnings in users_guide (incl #16640)
Oleg Grenrus [Wed, 8 May 2019 18:39:58 +0000 (21:39 +0300)] 
Fix some warnings in users_guide (incl #16640)

- short underline
- :ghc-flag:, not :ghc-flags:
- :since: have to be separate
- newline before code block
- workaround anchor generation so

    - pragma:SPECIALISE
    - pragma:SPECIALIZE-inline

  are different anchors, not all the same `pragma:SPECIALIZE`

4 months agoRemove stale 8.2.1-notes
Oleg Grenrus [Wed, 8 May 2019 18:22:19 +0000 (21:22 +0300)] 
Remove stale 8.2.1-notes

4 months agoMinor spelling fixes to users guide.
P.C. Shyamshankar [Sat, 27 Apr 2019 16:54:03 +0000 (12:54 -0400)] 
Minor spelling fixes to users guide.

4 months agotestsuite: introduce 'static_stats' tests
Alp Mestanogullari [Fri, 26 Apr 2019 12:25:46 +0000 (14:25 +0200)] 
testsuite: introduce 'static_stats' tests

They are a particular type of perf tests. This patch introduces a
'stats_files_dir' configuration field in the testsuite driver where all
haddock timing files (and possibly others in the future) are assumed to live.
We also change both the Make and Hadrian build systems to pass respectively
$(TOP)/testsuite/tests/perf/haddock/ and
<build root>/stage1/haddock-timing-files/ as the value of that new
configuration field, and to generate the timing files in those directories
in the first place while generating documentation with haddock.

This new test type can be seen as one dedicated to examining stats files that
are generated while building a GHC distribution. This also lets us get rid of
the 'extra_files' directives in the all.T entries for haddock.base,
haddock.Cabal and haddock.compiler.

4 months agoHandle hs-boot files in -Wmissing-home-modules (#16551)
Krzysztof Gogolewski [Tue, 9 Apr 2019 11:51:29 +0000 (13:51 +0200)] 
Handle hs-boot files in -Wmissing-home-modules (#16551)

4 months agoImprove comments around injectivity checks
Richard Eisenberg [Thu, 14 Mar 2019 17:29:17 +0000 (13:29 -0400)] 
Improve comments around injectivity checks

4 months agoAdd missing opening braces in Cmm dumps
Ömer Sinan Ağacan [Fri, 24 May 2019 18:28:45 +0000 (21:28 +0300)] 
Add missing opening braces in Cmm dumps

Previously -ddump-cmm was generating code with unbalanced curly braces:

     stg_atomically_entry() //  [R1]
             { info_tbls: [(cfl,
                            label: stg_atomically_info
                            rep: tag:16 HeapRep 1 ptrs { Thunk }
                            srt: Nothing)]
               stack_info: arg_space: 8 updfr_space: Just 8
           cfl: // cfk
               unwind Sp = Just Sp + 0;
               _cfk::P64 = R1;
               //tick src<rts/PrimOps.cmm:(1243,1)-(1245,1)>
               R1 = I64[_cfk::P64 + 8 + 8 + 0 * 8];
               call stg_atomicallyzh(R1) args: 8, res: 0, upd: 8;

After this patch:

     stg_atomically_entry() { //  [R1] <---- MISSING OPENING BRACE HERE
             { info_tbls: [(cfl,
                            label: stg_atomically_info
                            rep: tag:16 HeapRep 1 ptrs { Thunk }
                            srt: Nothing)]
               stack_info: arg_space: 8 updfr_space: Just 8
           cfl: // cfk
               unwind Sp = Just Sp + 0;
               _cfk::P64 = R1;
               //tick src<rts/PrimOps.cmm:(1243,1)-(1245,1)>
               R1 = I64[_cfk::P64 + 8 + 8 + 0 * 8];
               call stg_atomicallyzh(R1) args: 8, res: 0, upd: 8;

4 months agohadrian: Fix generation of settings
John Ericson [Fri, 24 May 2019 15:32:20 +0000 (11:32 -0400)] 
hadrian: Fix generation of settings

I jumbled some lines in e529c65eacf595006dd5358491d28c202d673732,
messing up the leading underscores and rts ways settings. This broke at
least stage1 linking on macOS, but probably loads of other things too.

Should fix #16685 and #16658.

4 months agoFix padding of entries in .prof files
Jasper Van der Jeugt [Wed, 22 May 2019 09:49:15 +0000 (11:49 +0200)] 
Fix padding of entries in .prof files

When the number of entries of a cost centre reaches 11 digits, it takes
up the whole space reserved for it and the prof file ends up looking

    ... no.        entries  %time %alloc   %time %alloc

    ... 120918     978250    0.0    0.0     0.0    0.0
    ... 118891          0    0.0    0.0    73.3   80.8
    ... 11890229702412351    8.9   13.5    73.3   80.8
    ... 118903  153799689    0.0    0.1     0.0    0.1

This results in tooling not being able to parse the .prof file.  I
realise we have the JSON output as well now, but still it'd be good to
fix this little weirdness.

Original bug report and full prof file can be seen here:

4 months agobase: Include (<$) in all exports of Functor
Simon Jakobi [Wed, 22 May 2019 05:31:49 +0000 (07:31 +0200)] 
base: Include (<$) in all exports of Functor

Previously the haddocks for Control.Monad and Data.Functor gave
the impression that `fmap` was the only Functor method.

Fixes #16681.

4 months agoAdd a pprTraceWith function
Sebastian Graf [Mon, 20 May 2019 15:36:18 +0000 (17:36 +0200)] 
Add a pprTraceWith function

4 months agoFix tcfail158 (#15899)
Krzysztof Gogolewski [Sun, 19 May 2019 19:44:11 +0000 (21:44 +0200)] 
Fix tcfail158 (#15899)

As described in #15899, this test was broken, but now it's back
to normal.

4 months agoCorrect the large tuples section in user's guide
Joshua Price [Sun, 19 May 2019 18:40:47 +0000 (14:40 -0400)] 
Correct the large tuples section in user's guide

Fixes #16644.

4 months agoFix typo of primop format
mizunashi_mana [Fri, 17 May 2019 06:49:50 +0000 (02:49 -0400)] 
Fix typo of primop format

4 months agoHadrian: Fix problem with unlit path in settings file
Alp Mestanogullari [Wed, 15 May 2019 13:26:45 +0000 (15:26 +0200)] 
Hadrian: Fix problem with unlit path in settings file

e529c65e introduced a problem in the logic for generating the
path to the unlit command in the settings file, and this patches
fixes it.

This fixes many tests, the simplest of which is:

> _build/stage1/bin/ghc testsuite/tests/parser/should_fail/T8430.lhs

which failed because of a wrong path for unlit, and now fails for the right
reason, with the error message expected for this test.

This addresses #16659.

4 months agoLowercase windows imports
Moritz Angermann [Wed, 15 May 2019 02:54:42 +0000 (10:54 +0800)] 
Lowercase windows imports

While windows and macOS are currently on case-insensitive file
systems, this poses no issue on those.  When cross compiling from
linux with a case sensitive file system and mingw providing only
lowercase headers, this in fact produces an issue.  As such we just
lowercase the import headers, which should still work fine on a
case insensitive file system and also enable mingw's headers to
be usable porperly.

4 months agoLet the specialiser work on dicts under lambdas
Sandy Maguire [Thu, 16 May 2019 16:12:10 +0000 (12:12 -0400)] 
Let the specialiser work on dicts under lambdas

Following the discussion under #16473, this change allows the
specializer to work on any dicts in a lambda, not just those that occur
at the beginning.

For example, if you use data types which contain dictionaries and
higher-rank functions then once these are erased by the optimiser you
end up with functions such as:

  -> forall (m :: * -> *).
     Monad m =>
     (forall x. Union '[State (Sum Int)] x -> m x) -> m ()

The dictionary argument is after the Int# value argument, this patch
allows `go` to be specialised.

4 months agoHadrian: Add Mising Libffi Dependencies #16653
David Eichmann [Tue, 14 May 2019 10:44:00 +0000 (11:44 +0100)] 
Hadrian: Add Mising Libffi Dependencies #16653

Libffi is ultimately built from a single archive file (e.g.
The file can be seen as the shallow dependency for the whole
libffi build. Hence, in all libffi rules, the archive is
`need`ed and the build directory is `trackAllow`ed.

4 months agoAdd `keepCAFs` to RtsSymbols
Moritz Angermann [Wed, 15 May 2019 03:13:42 +0000 (11:13 +0800)] 
Add `keepCAFs` to RtsSymbols

4 months agoAdd PlainPanic for throwing exceptions without depending on pprint
Michael Sloan [Thu, 14 Mar 2019 22:47:44 +0000 (15:47 -0700)] 
Add PlainPanic for throwing exceptions without depending on pprint

This commit splits out a subset of GhcException which do not depend on
pretty printing (SDoc), as a new datatype called
PlainGhcException. These exceptions can be caught as GhcException,
because 'fromException' will convert them.

The motivation for this change is that that the Panic module
transitively depends on many modules, primarily due to pretty printing
code.  It's on the order of about 130 modules.  This large set of
dependencies has a few implications:

1. To avoid cycles / use of boot files, these dependencies cannot
throw GhcException.

2. There are some utility modules that use UnboxedTuples and also use
`panic`. This means that when loading GHC into GHCi, about 130
additional modules would need to be compiled instead of
interpreted. Splitting the non-pprint exception throwing into a new
module resolves this issue. See #13101

4 months agoAllow metric change after reverting "Add Generic tuple instances up to 15-tuple"...
David Eichmann [Fri, 24 May 2019 10:22:29 +0000 (11:22 +0100)] 
Allow metric change after reverting "Add Generic tuple instances up to 15-tuple" #16688

Metrics increased on commit 5eb9445444c4099fc9ee0803ba45db390900a80f and
decreased on revert commit 535a26c90f458801aeb1e941a3f541200d171e8f.

Metric Decrease:

4 months agoSome forall-related cleanup in deriving code
Ryan Scott [Tue, 14 May 2019 19:04:02 +0000 (15:04 -0400)] 
Some forall-related cleanup in deriving code

* Tweak the parser to allow `deriving` clauses to mention explicit
  `forall`s or kind signatures without gratuitous parentheses.
  (This fixes #14332 as a consequence.)
* Allow Haddock comments on `deriving` clauses with explicit
  `forall`s. This requires corresponding changes in Haddock.

4 months agoAdd a `NOINLINE` pragma on `someNatVal` (#16586)
Iavor Diatchki [Tue, 7 May 2019 20:02:27 +0000 (13:02 -0700)] 
Add a `NOINLINE` pragma on `someNatVal` (#16586)

This fixes #16586, see `Note [NOINLINE someNatVal]` for details.

4 months agoAdd a test for #16597
Ömer Sinan Ağacan [Tue, 23 Apr 2019 11:17:40 +0000 (14:17 +0300)] 
Add a test for #16597

4 months agoadd an --hadrian mode to ./validate
Alp Mestanogullari [Tue, 9 Apr 2019 10:08:04 +0000 (12:08 +0200)] 
add an --hadrian mode to ./validate

When the '--hadrian' flag is passed to the validate script, we use hadrian
to build GHC, package it up in a binary distribution and later on run GHC's
testsuite against the said bindist, which gets installed locally in the process.

Along the way, this commit fixes a typo, an omission (build iserv binaries
before producing the bindist archive) and moves the Makefile that enables
'make install' on those bindists from being a list of strings in the code to
an actual file (it was becoming increasingly annoying to work with).

Finally, the Settings.Builders.Ghc part of this patch is necessary for being
able to use the installed binary distribution, in 'validate'.

4 months agoRevert "Add Generic tuple instances up to 15-tuple" #16688
David Eichmann [Thu, 23 May 2019 17:26:37 +0000 (18:26 +0100)] 
Revert "Add Generic tuple instances up to 15-tuple" #16688

This reverts commit 5eb9445444c4099fc9ee0803ba45db390900a80f.
It has caused an increase in variance of performance test T9630,
causing CI to fail.

5 months agofix Template Haskell cross compilation on 64 bit compiler with 32 bit target
Luite Stegeman [Mon, 8 Jan 2018 08:42:30 +0000 (08:42 +0000)] 
fix Template Haskell cross compilation on 64 bit compiler with 32 bit target

5 months agoUse HsTyPats in associated type family defaults
Ryan Scott [Sun, 12 May 2019 23:16:37 +0000 (19:16 -0400)] 
Use HsTyPats in associated type family defaults

Associated type family default declarations behave strangely in a
couple of ways:

1. If one tries to bind the type variables with an explicit `forall`,
   the `forall`'d part will simply be ignored. (#16110)
2. One cannot use visible kind application syntax on the left-hand
   sides of associated default equations, unlike every other form
   of type family equation. (#16356)

Both of these issues have a common solution. Instead of using
`LHsQTyVars` to represent the left-hand side arguments of an
associated default equation, we instead use `HsTyPats`, which is what
other forms of type family equations use. In particular, here are
some highlights of this patch:

* `FamEqn` is no longer parameterized by a `pats` type variable, as
  the `feqn_pats` field is now always `HsTyPats`.
* The new design for `FamEqn` in chronicled in
  `Note [Type family instance declarations in HsSyn]`.
* `TyFamDefltEqn` now becomes the same thing as `TyFamInstEqn`. This
  means that many of `TyFamDefltEqn`'s code paths can now reuse the
  code paths for `TyFamInstEqn`, resulting in substantial
  simplifications to various parts of the code dealing with
  associated type family defaults.

Fixes #16110 and #16356.

5 months agoHadrian: add --test-root-dirs, to only run specific directories of tests
Alp Mestanogullari [Tue, 14 May 2019 16:16:52 +0000 (18:16 +0200)] 
Hadrian: add --test-root-dirs, to only run specific directories of tests

We can specify several of those, by using the flag multiple times or
just once but combining the directories with ':'.

Along the way, this patch also fixes the testsuite-related --only flag,
so that we can use it many times instead of being force to specify a
space-separated list of test in a single --only flag.

5 months agoRTS: Fix restrictive cast
Alec Theriault [Mon, 13 May 2019 22:31:56 +0000 (15:31 -0700)] 
RTS: Fix restrictive cast

Commit e75a9afd2989e0460f9b49fa07c1667299d93ee9 added an `unsigned` cast
to account for OSes that have signed `rlim_t` signed. Unfortunately,
the `unsigned` cast has the unintended effect of narrowing `rlim_t` to
only 4 bytes. This leads to some spurious out of memory crashes
(in particular: Haddock crashes with OOM whenn building docs of

In this case, `W_` is a better type to cast to: we know it will be
unsigned too and it has the same type as `*len` (so we don't suffer from
accidental narrowing).

5 months agoAdd regression test for old Word32 arithmetic issue (#497)
Kevin Buhr [Fri, 10 May 2019 00:56:53 +0000 (19:56 -0500)] 
Add regression test for old Word32 arithmetic issue (#497)

5 months agoUse datatype for unboxed returns when loading ghc into ghci
Michael Sloan [Fri, 15 Mar 2019 00:26:51 +0000 (17:26 -0700)] 
Use datatype for unboxed returns when loading ghc into ghci

See #13101 and #15454

5 months agoHave GHCi use object code for UnboxedTuples modules #15454
Michael Sloan [Thu, 14 Mar 2019 06:04:41 +0000 (23:04 -0700)] 
Have GHCi use object code for UnboxedTuples modules #15454

The idea is to automatically enable -fobject-code for modules that use
UnboxedTuples, along with all the modules they depend on. When looking
into how to solve this, I was pleased to find that there was already
highly similar logic for enabling code generation when -fno-code is
specified but TemplateHaskell is used.

The state before this patch was that if you used unboxed tuples then you
had to enable `-fobject-code` globally rather than on a per module

5 months agoAllow for multiple linker instances. Fixes Haskell portion of #3372.
Julian Leviston [Sat, 2 Feb 2019 09:10:51 +0000 (20:10 +1100)] 
Allow for multiple linker instances. Fixes Haskell portion of #3372.

5 months agoUpdate .gitlab-ci.yml
Ben Gamari [Sat, 18 May 2019 21:35:54 +0000 (17:35 -0400)] 
Update .gitlab-ci.yml

5 months agogitlab-ci: Allow Windows Hadrian build to fail
Ben Gamari [Sat, 18 May 2019 21:34:06 +0000 (17:34 -0400)] 
gitlab-ci: Allow Windows Hadrian build to fail

Due to #16574.

5 months agoFix #16666 by parenthesizing contexts in Convert
Ryan Scott [Thu, 16 May 2019 21:50:33 +0000 (17:50 -0400)] 
Fix #16666 by parenthesizing contexts in Convert

Most places where we convert contexts in `Convert` are actually in
positions that are to the left of some `=>`, such as in superclasses
and instance contexts. Accordingly, these contexts need to be
parenthesized at `funPrec`. To accomplish this, this patch changes
`cvtContext` to require a precedence argument for the purposes of
calling `parenthesizeHsContext` and adjusts all `cvtContext` call
sites accordingly.

5 months agodistrib/ remove mention to 'settings', since is gone
Alp Mestanogullari [Thu, 16 May 2019 09:12:30 +0000 (11:12 +0200)] 
distrib/ remove mention to 'settings', since is gone

Otherwise, when `./configure`ing a GHC bindist, produced by either Make or
Hadrian, we would try to generate the `settings` file from the ``
template that we used to have around but which has been gone since d37d91e9.
That commit generates the settings file using the build systems instead, but
forgot to remove this mention to the `settings` file.

5 months agoUpdate resolver for for happy 1.19.10
Shayne Fletcher [Wed, 15 May 2019 10:30:36 +0000 (06:30 -0400)] 
Update resolver for for happy 1.19.10

5 months agoFix doc for Data.Function.fix.
Javran Cheng [Mon, 13 May 2019 21:58:56 +0000 (14:58 -0700)] 
Fix doc for Data.Function.fix.

Doc-only change.

5 months agousers-guide: Fix -rtsopts default
Kirill Elagin [Mon, 13 May 2019 13:20:50 +0000 (09:20 -0400)] 
users-guide: Fix -rtsopts default

5 months agoRefactor Libffi and RTS rules
David Eichmann [Fri, 3 May 2019 17:53:26 +0000 (18:53 +0100)] 
Refactor Libffi and RTS rules

This removes a hack that copies libffi files to the rts
build directory. This was done in a libffi rule, but now
an rts rule correctly needs and copies the relevant
files from the libffi build dir to the rts build dir.

Issues: #16272 #16304

5 months agoInclude CPP preprocessor dependencies in -M output
David Eichmann [Tue, 9 Apr 2019 12:17:34 +0000 (13:17 +0100)] 
Include CPP preprocessor dependencies in -M output

Issue #16521

5 months agousers-guide: Fix directive errors on 8.10
Takenobu Tani [Sat, 27 Apr 2019 11:54:21 +0000 (20:54 +0900)] 
users-guide: Fix directive errors on 8.10

The following sections are not displayed due to a directive error:

  * -Wunused-record-wildcards
  * -Wredundant-record-wildcards

I changed the location of the `since` directive.

[skip ci]