ghc.git
5 weeks agoHadrian: Track RTS library symlink targets wip/hadrian-librts-symlinks
David Eichmann [Tue, 4 Jun 2019 18:01:19 +0000 (19:01 +0100)] 
Hadrian: Track RTS library symlink targets

This requires creating RTS library symlinks when registering, outside
of the rule for the registered library file.

6 weeks agoghc-heap: Add closure_size_noopt test
Ben Gamari [Sun, 9 Jun 2019 14:56:32 +0000 (10:56 -0400)] 
ghc-heap: Add closure_size_noopt test

This adds a new test, only run in the `normal` way, to verify the size
of FUNs and PAPs.

6 weeks agotestsuite: Fix and extend closure_size test
Ben Gamari [Sat, 8 Jun 2019 03:15:45 +0000 (23:15 -0400)] 
testsuite: Fix and extend closure_size test

This was previously broken in several ways. This is fixed and it also
now tests arrays. Unfortunately I was unable to find a way to continue
testing PAP and FUN sizes; these simply depend too much upon the
behavior of the simplifier.

I also tried to extend this to test non-empty arrays as well but
unfortunately this was non-trivial as the array card size constant isn't
readily available from haskell.

Fixes #16531.

6 weeks agoRefactor the rules for .hi and .o into a single rule using `&%>` #16764
David Eichmann [Thu, 6 Jun 2019 11:50:42 +0000 (12:50 +0100)] 
Refactor the rules for .hi and .o into a single rule using `&%>` #16764

Currently the rule for .hi files just triggers (via need) the rule
for the .o file, and .o rule generates both the .o and .hi file.
Likewise for .o-boot and .hi-boot files. This is a bit of an abuse
of Shake, and in fact shake supports rules with multiple output
with the &%> function. This exact use case appears in Neil
Mitchell's paper *Shake Before Building* section 6.3.

6 weeks agoComments only: document newtypes' DataConWrapId
Richard Eisenberg [Fri, 31 May 2019 17:37:56 +0000 (13:37 -0400)] 
Comments only: document newtypes' DataConWrapId

6 weeks agoPrint role annotations in TemplateHaskell brackets (#16718)
Vladislav Zavialov [Sat, 1 Jun 2019 12:08:24 +0000 (15:08 +0300)] 
Print role annotations in TemplateHaskell brackets (#16718)

6 weeks agobase: Mark CPUTime001 as fragile
Ben Gamari [Thu, 30 May 2019 13:29:37 +0000 (09:29 -0400)] 
base: Mark CPUTime001 as fragile

As noted in #16224, CPUTime001 has been quite problematic, reporting
non-monotonic timestamps in CI. Unfortunately I've been unable to
reproduce this locally.

6 weeks agorts: Fix RetainerProfile early return with TREC_CHUNK
Daniel Gröber [Thu, 6 Jun 2019 06:14:19 +0000 (08:14 +0200)] 
rts: Fix RetainerProfile early return with TREC_CHUNK

When pop() returns with `*c == NULL` retainerProfile will immediately
return. All other code paths is pop() continue with the next stackElement
when this happens so it seems weird to me that TREC_CHUNK we would suddenly
abort everything even though the stack might still have elements left to
process.

6 weeks agoRemove CPP ensuring word size is 32 or 64 bits around Addr# <-> int# primops
John Ericson [Tue, 4 Jun 2019 02:56:17 +0000 (22:56 -0400)] 
Remove CPP ensuring word size is 32 or 64 bits around Addr# <-> int# primops

It shouldn't be needed these days, and those primops are "highly
deprecated" anyways.

This fits with my plans because it removes one bit of target-dependence
of the builtin primops, and this is the hardest part of GHC to make
multi-target.

CC @carter

6 weeks agoComments only: document tcdDataCusk better.
Richard Eisenberg [Fri, 31 May 2019 17:28:42 +0000 (13:28 -0400)] 
Comments only: document tcdDataCusk better.

6 weeks agoHadrian: need CPP preprocessor dependencies #16660
David Eichmann [Tue, 16 Apr 2019 14:10:35 +0000 (15:10 +0100)] 
Hadrian: need CPP preprocessor dependencies #16660

Use the new -include-cpp-deps ghc option (#16521)
when generating .dependencies files in hadrian.
This is version gated as -include-cpp-deps is a
relatively new option.

6 weeks agotestsuite: Add test for #16509
Ben Gamari [Tue, 28 May 2019 03:00:16 +0000 (23:00 -0400)] 
testsuite: Add test for #16509

6 weeks agoDo not report error if Name in pragma is unbound
nineonine [Wed, 22 May 2019 04:34:27 +0000 (21:34 -0700)] 
Do not report error if Name in pragma is unbound

6 weeks agorts: Separate population of eventTypes from initial event generation
Ben Gamari [Wed, 15 May 2019 21:49:34 +0000 (17:49 -0400)] 
rts: Separate population of eventTypes from initial event generation

Previously these two orthogonal concerns were both implemented in
postHeaderEvents which made it difficult to send header events after RTS
initialization.

6 weeks agoAdd disable/enable commands to ghci debugger #2215
Roland Senn [Tue, 14 May 2019 07:45:36 +0000 (09:45 +0200)] 
Add disable/enable commands to ghci debugger #2215

This patch adds two new commands `:enable` and `:disable` to the GHCi debugger.
Opposite to `:set stop <n> :continue` a breakpoint disabled with `:disable` will
not loose its previously set stop command.
A new field breakEnabled is added to the BreakLocation data structure to
track the enable/disable state. When a breakpoint is disabled with a `:disable`
command, the following happens:

The corresponding BreakLocation data element is searched dictionary of the
`breaks` field of the GHCiStateMonad. If the break point is found and not
already in the disabled state, the breakpoint is removed from bytecode.
The BreakLocation data structure is kept in the breaks list and the new
breakEnabled field is set to false.

The `:enable` command works similar.

The breaks field in the GHCiStateMonad was changed from an association list
to int `IntMap`.

6 weeks agoFix #16517 by bumping the TcLevel for method sigs
Richard Eisenberg [Wed, 5 Jun 2019 22:02:13 +0000 (18:02 -0400)] 
Fix #16517 by bumping the TcLevel for method sigs

There were actually two bugs fixed here:

1. candidateQTyVarsOfType needs to be careful that it does not
   try to zap metavariables from an outer scope as "naughty"
   quantification candidates. This commit adds a simple check
   to avoid doing so.

2. We weren't bumping the TcLevel in kcHsKindSig, which was used
   only for class method sigs. This mistake led to the acceptance
   of

     class C a where
       meth :: forall k. Proxy (a :: k) -> ()

   Note that k is *locally* quantified. This patch fixes the
   problem by using tcClassSigType, which correctly bumps the
   level. It's a bit inefficient because tcClassSigType does other
   work, too, but it would be tedious to repeat much of the code
   there with only a few changes. This version works well and is
   simple.

And, while updating comments, etc., I noticed that tcRnType was
missing a pushTcLevel, leading to #16767, which this patch also
fixes, by bumping the level. In the refactoring here, I also
use solveEqualities. This initially failed ghci/scripts/T15415,
but that was fixed by teaching solveEqualities to respect
-XPartialTypeSignatures.

This patch also cleans up some Notes around error generation that
came up in conversation.

Test case: typecheck/should_fail/T16517, ghci/scripts/T16767

6 weeks agoHandle trailing path separator in package DB names (#16360)
Kevin Buhr [Fri, 3 May 2019 23:15:44 +0000 (18:15 -0500)] 
Handle trailing path separator in package DB names (#16360)

Package DB directories with trailing separator (provided via
GHC_PACKAGE_PATH or via -package-db) resulted in incorrect calculation of
${pkgroot} substitution variable.  Keep the trailing separator while
resolving as directory or file, but remove it before dropping the last
path component with takeDirectory.

Closes #16360.

6 weeks agoSmall refactorings in ExtractDocs
Simon Jakobi [Sun, 5 May 2019 12:36:02 +0000 (14:36 +0200)] 
Small refactorings in ExtractDocs

6 weeks agotestsuite: Add test for #16514
Ben Gamari [Tue, 2 Apr 2019 15:59:06 +0000 (11:59 -0400)] 
testsuite: Add test for #16514

6 weeks agoIntroduce log1p and expm1 primops
chessai [Fri, 1 Feb 2019 18:01:46 +0000 (13:01 -0500)] 
Introduce log1p and expm1 primops

Previously log and exp were primitives yet log1p and expm1 were FFI
calls. Fix this non-uniformity.

6 weeks agotestsuite: Suppress ticks in T4918 output
Ben Gamari [Mon, 3 Jun 2019 20:51:51 +0000 (16:51 -0400)] 
testsuite: Suppress ticks in T4918 output

As noted in #16741, this test otherwise breaks when `base` is compiled
with `-g`.

6 weeks agohadrian: Properly partition options in sourceArgs
Matthew Pickering [Thu, 30 May 2019 15:20:26 +0000 (16:20 +0100)] 
hadrian: Properly partition options in sourceArgs

Previously if you build the `ghc` package then it would has the default
opts and the library opts. This is different behaviour to make where the
library opts are only reserved for things in the `libraries`
subdirectory (I believe)

Fixes #16716

6 weeks agoExplain that 'mappend' and '(<>)' should be the same [skip ci]
Alexandre Baldé [Thu, 4 Apr 2019 23:48:06 +0000 (00:48 +0100)] 
Explain that 'mappend' and '(<>)' should be the same [skip ci]

6 weeks agogitlab-ci: Ensure that all commits on a branch are submodule-linted
Ben Gamari [Sat, 8 Jun 2019 20:44:55 +0000 (16:44 -0400)] 
gitlab-ci: Ensure that all commits on a branch are submodule-linted

The previous commit reworked things such that the submodule linter would
only run on the head commit. However, the linter only checks the
submodules which are touched by the commits it is asked to lint.
Consequently it would be possible for a bad submodule to sneak through.

Thankfully, we can use the handy CI_COMMIT_BEFORE_SHA attribute to
find the base commit of the push.

6 weeks agogitlab-ci: Fix submodule linting of commits
Ben Gamari [Sat, 8 Jun 2019 18:39:27 +0000 (14:39 -0400)] 
gitlab-ci: Fix submodule linting of commits

There is no notion of a base commit when we aren't checking a merge
request. Just check the HEAD commit.

6 weeks agogitlab-ci: Disable shallow clones
Ben Gamari [Sat, 8 Jun 2019 18:02:02 +0000 (14:02 -0400)] 
gitlab-ci: Disable shallow clones

Previously we were passing `--unshallow` to `git fetch` in the linting
rules to ensure that the base commit which we were linting with respect
to was available. However, this breaks due to GitLab's re-use of
working directories since `git fetch --unshallow` fails on a repository
which is not currently shallow.

Given that `git fetch --unshallow` circumvents the efficiencies provided
by shallow clones anyways, let's just disable them entirely.

There is no documented way to do disable shallow clones but on checking
the GitLab implementation it seems that setting `GIT_DEPTH=0` should do
the trick.

6 weeks agoRemove trailing whitespace
Matthew Pickering [Fri, 7 Jun 2019 13:33:13 +0000 (14:33 +0100)] 
Remove trailing whitespace

[skip ci]

This should really be caught by the linters! (#16711)

6 weeks agogitlab-ci: A few clarifying comments
Ben Gamari [Fri, 7 Jun 2019 15:14:42 +0000 (11:14 -0400)] 
gitlab-ci: A few clarifying comments

6 weeks agogitlab-ci: Fix submodule linter
Ben Gamari [Fri, 7 Jun 2019 15:14:07 +0000 (11:14 -0400)] 
gitlab-ci: Fix submodule linter

The job script didn't even try to compute the base commit to lint with
respect to.

6 weeks agogitlab-ci: Use --unshallow when fetching for linters
Ben Gamari [Fri, 7 Jun 2019 14:55:30 +0000 (10:55 -0400)] 
gitlab-ci: Use --unshallow when fetching for linters

GitLab creates a shallow clone. However, this means that we may not have
the base commit of an MR when linting, causing `git merge-base` to fail.
Fix this by passing `--unshallow` to `git fetch`, ensuring that we have
the entire history.

6 weeks agoFix two lint failures in rts/linker/MachO.c
Matthew Pickering [Thu, 30 May 2019 10:13:31 +0000 (11:13 +0100)] 
Fix two lint failures in rts/linker/MachO.c

6 weeks agogitlab-ci: Don't run two submodule checking jobs on Marge jobs
Matthew Pickering [Thu, 30 May 2019 10:12:12 +0000 (11:12 +0100)] 
gitlab-ci: Don't run two submodule checking jobs on Marge jobs

6 weeks agogitlab-ci: Linters, don't allow to fail
Matthew Pickering [Thu, 30 May 2019 10:11:04 +0000 (11:11 +0100)] 
gitlab-ci: Linters, don't allow to fail

Ben disabled them in cd85f8a71bb56cff332560e1d571b3406789fb71 but didn't
say how or why they were broken.

6 weeks agogitlab-ci: Create index.html in documentation deployment
Ben Gamari [Thu, 6 Jun 2019 18:09:53 +0000 (14:09 -0400)] 
gitlab-ci: Create index.html in documentation deployment

Otherwise navigating to https://ghc.gitlab.haskell.org/ghc will result
in a 404.

6 weeks agoHadrian: use deb9 Docker images instead of deb8 for CI jobs
Alp Mestanogullari [Wed, 5 Jun 2019 21:40:54 +0000 (23:40 +0200)] 
Hadrian: use deb9 Docker images instead of deb8 for CI jobs

This should fix #16739, where we seem to be getting extra carets in
a test's output because of the gcc that ships with the deb8 image,
whule we're not observing those extra carets in the deb9-based (Make)
jobs.

6 weeks agobase: Export Finalizers
Ben Gamari [Wed, 5 Jun 2019 03:27:41 +0000 (23:27 -0400)] 
base: Export Finalizers

As requested in #16750.

6 weeks agoPass preprocessor options to C compiler when building foreign C files (#16737)
Zejun Wu [Tue, 4 Jun 2019 22:25:10 +0000 (15:25 -0700)] 
Pass preprocessor options to C compiler when building foreign C files (#16737)

6 weeks agoremove backticks from markup - it doesn't mean what I think it means
code5hot [Thu, 6 Jun 2019 00:34:09 +0000 (20:34 -0400)] 
remove backticks from markup - it doesn't mean what I think it means

6 weeks agoUsed terminology from a paper. Added it as a reference.
code5hot [Wed, 5 Jun 2019 19:17:12 +0000 (15:17 -0400)] 
Used terminology from a paper. Added it as a reference.

6 weeks agoUpdate Traversable.hs with a note about an intuitive law
code5hot [Tue, 4 Jun 2019 22:00:28 +0000 (18:00 -0400)] 
Update Traversable.hs with a note about an intuitive law

6 weeks agollvm-targets: Add x86_64 android layout
Moritz Angermann [Sat, 9 Dec 2017 23:36:20 +0000 (07:36 +0800)] 
llvm-targets: Add x86_64 android layout

6 weeks agoFix isValidNatural: The BigNat in NatJ# must have at least 2 limbs
Simon Jakobi [Tue, 4 Jun 2019 00:54:35 +0000 (02:54 +0200)] 
Fix isValidNatural: The BigNat in NatJ# must have at least 2 limbs

Previously the `integer-gmp` variant of `isValidNatural` would fail to
detect values `<= maxBound::Word` that were incorrectly encoded using
the `NatJ#` constructor.

6 weeks agoHadrian: Delete target symlink in createFileLinkUntracked
Ben Gamari [Mon, 3 Jun 2019 22:24:17 +0000 (18:24 -0400)] 
Hadrian: Delete target symlink in createFileLinkUntracked

Previously createFileLinkUntracked would fail if the symlink already
existed.

6 weeks agoPreserve ShadowInfo when rewriting evidence
Simon Peyton Jones [Mon, 3 Jun 2019 13:46:39 +0000 (14:46 +0100)] 
Preserve ShadowInfo when rewriting evidence

When the canonicaliser rewrites evidence of a Wanted, it
should preserve the ShadowInfo (ctev_nosh) field.  That is,
a WDerive should rewrite to WDerive, and WOnly to WOnly.

Previously we were unconditionally making a WDeriv, thereby
rewriting WOnly to WDeriv.  This bit Nick Frisby (issue #16735)
in the context of his plugin, but we don't have a compact test
case.

The fix is simple, but does involve a bit more plumbing,
to pass the old ShadowInfo around, to use when building
the new Wanted.

6 weeks agoFactor out 'getLibDir' / 'getBaseDir' into a new GHC.BaseDir ghc-boot module
John Ericson [Fri, 31 May 2019 01:08:44 +0000 (21:08 -0400)] 
Factor out 'getLibDir' / 'getBaseDir' into a new GHC.BaseDir ghc-boot module

ghc-pkg and ghc already both needed this. I figure it is better to
deduplicate, especially seeing that changes to one (FreeBSD CPP) didn't
make it to the other.

Additionally in !1090 I make ghc-pkg look up the settings file, which
makes it use the top dir a bit more widely. If that lands, any
difference in the way they find the top dir would be more noticable.

That change also means sharing more code between ghc and ghc-package
(namely the settings file parsing code), so I'd think it better to get
off the slipperly slope of duplicating code now.

6 weeks agoFix #16700: Tiny errors in output of GHCi commands :forward and :info
Roland Senn [Wed, 29 May 2019 20:12:41 +0000 (22:12 +0200)] 
Fix #16700: Tiny errors in output of GHCi commands :forward and :info

`:info Coercible` now outputs the correct section number of the GHCi User's guide together with the secion title.

`:forward x` gives the correct syntax hint.

6 weeks agoAdd HEAP_PROF_SAMPLE_END event to mark end of samples
Matthew Pickering [Wed, 29 May 2019 15:56:08 +0000 (16:56 +0100)] 
Add HEAP_PROF_SAMPLE_END event to mark end of samples

This allows a user to observe how long a sampling period lasts so that
the time taken can be removed from the profiling output.

Fixes #16697

6 weeks agoTmOracle: Replace negative term equalities by refutable PmAltCons
Sebastian Graf [Wed, 22 May 2019 16:46:37 +0000 (18:46 +0200)] 
TmOracle: Replace negative term equalities by refutable PmAltCons

The `PmExprEq` business was a huge hack and was at the same time vastly
too powerful and not powerful enough to encode negative term equalities,
i.e. facts of the form "forall y. x ≁ Just y".

This patch introduces the concept of 'refutable shapes': What matters
for the pattern match checker is being able to encode knowledge of the
kind "x can no longer be the literal 5". We encode this knowledge in a
`PmRefutEnv`, mapping a set of newly introduced `PmAltCon`s (which are
just `PmLit`s at the moment) to each variable denoting above
inequalities.

So, say we have `x ≁ 42 ∈ refuts` in the term oracle context and
try to solve an equality like `x ~ 42`. The entry in the refutable
environment will immediately lead to a contradiction.

This machinery renders the whole `PmExprEq` and `ComplexEq` business
unnecessary, getting rid of a lot of (mostly dead) code.

See the Note [Refutable shapes] in TmOracle for a place to start.

Metric Decrease:
    T11195

6 weeks ago[skip ci] Improve the documentation of the CNF primops. In this context, the term...
Andrew Martin [Thu, 6 Jun 2019 14:42:35 +0000 (10:42 -0400)] 
[skip ci] Improve the documentation of the CNF primops. In this context, the term "size" is ambiguous and is now avoided. Additionally, the distinction between a CNF and the blocks that comprise it has been emphasize. The vocabulary has been made more consistent with the vocabulary in the C source for CNF.

6 weeks agogitlab-ci: Disable darwin hadrian job
Matthew Pickering [Fri, 7 Jun 2019 08:36:32 +0000 (09:36 +0100)] 
gitlab-ci: Disable darwin hadrian job

See #16771

We don't have enough capacity for the two jobs currently.

[skip ci]

6 weeks agoHadrian: profiling and debug enabled ways support -eventlog too
Alp Mestanogullari [Mon, 3 Jun 2019 13:57:02 +0000 (15:57 +0200)] 
Hadrian: profiling and debug enabled ways support -eventlog too

6 weeks agomake: Fix bindist installation
Ben Gamari [Thu, 30 May 2019 15:33:05 +0000 (11:33 -0400)] 
make: Fix bindist installation

This fixes a few vestigial references to `settings` left over from !655.
Fixes #16715.

6 weeks agogitlab-ci: Run bindisttest during CI
Ben Gamari [Wed, 8 May 2019 15:03:45 +0000 (11:03 -0400)] 
gitlab-ci: Run bindisttest during CI

6 weeks 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
type.

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

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

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

7 weeks 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
first):

  $ git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/ci/perf
  $ python3 testsuite/driver/perf_notes.py --ci --chart --test-env x86_64-darwin --test-name T9630 master~500..master

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

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

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

7 weeks agoAdd `-haddock` to perf.mk rather than prepare-system.sh
Takenobu Tani [Sun, 14 Apr 2019 10:11:12 +0000 (19:11 +0900)] 
Add `-haddock` to perf.mk rather than prepare-system.sh

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

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

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

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

Note:
  * 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.

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

7 weeks 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
shifts.

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

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.

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

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

7 weeks 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"`.

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

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

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

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

7 weeks 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
[ArityType]:

    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.

7 weeks 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'

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

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

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

7 weeks 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
    II32/II64
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 <slyfox@gentoo.org>
7 weeks 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
comparison.

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
7 weeks 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:

  - HACKING.md:
    - Modify Phabricator to GitLab infomation
    - Remove old Trac information
    - Add link to GitLab activity

  - MAKEHELP.md:
    - Add link to hadrian wiki
    - Fix markdown format

  - INSTALL.md:
    - Modify boot command to remove python3
    - Fix markdown format

  - README.md:
    - Modify tarball file suffix
    - Fix markdown format

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

[skip ci]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

7 weeks 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
together.

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

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.

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