[Git][ghc/ghc][cherry-pick-908b4b86] 10 commits: Restore Xmm registers properly in StgCRun.c
Ben Gamari
gitlab at gitlab.haskell.org
Fri Apr 19 14:25:14 UTC 2019
Ben Gamari pushed to branch cherry-pick-908b4b86 at Glasgow Haskell Compiler / GHC
Commits:
cb9c0f21 by klebinger.andreas at gmx.at at 2019-04-17T14:57:23Z
Restore Xmm registers properly in StgCRun.c
This fixes #16514: Xmm6-15 was restored based off rax instead of rsp.
The code was introduced in the fix for #14619.
(cherry picked from commit 9b131500371a07626e33edc56700c12322364560)
- - - - -
31654409 by Ben Gamari at 2019-04-17T14:57:23Z
configure: Always use AC_LINK_ELSEIF when testing against assembler
This fixes #16440, where the build system incorrectly concluded that the
`.subsections_via_symbols` assembler directive was supported on a Linux
system. This was caused by the fact that gcc was invoked with `-flto`;
when so-configured gcc does not call the assembler but rather simply
serialises its AST for compilation during the final link.
This is described in Note [autoconf assembler checks and -flto].
(cherry picked from commit 7b090b53fea065d2cfd967ea919426af9ba8d737)
- - - - -
2de84e65 by Matthew Pickering at 2019-04-17T14:57:23Z
Add werror function to Flavour.hs
This function makes it easy to turn on `-Werror` in the correct manner
to mimic how CI turns on -Werror.
(cherry picked from commit 8dcd00cef7782c64b5484b106f4fd77c8c87e40a)
- - - - -
4e734059 by Alp Mestanogullari at 2019-04-17T14:57:23Z
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.
(cherry picked from commit 8442103aa575dc1cd25cb3231e729c6365dc1b5c)
- - - - -
7ccdb7de by Ben Gamari at 2019-04-17T14:57:23Z
gitlab-ci: Backport from master
- - - - -
7160a821 by Ben Gamari at 2019-04-17T14:57:23Z
users-guide: Add pretty to package list
- - - - -
e9e1c5a2 by Ben Gamari at 2019-04-17T14:57:23Z
gitlab-ci: Allow failing build jobs to fail
- - - - -
d127dc13 by Ben Gamari at 2019-04-17T14:57:23Z
Allow unregisterised build to fail
- - - - -
d44f54aa by Ben Gamari at 2019-04-17T14:58:05Z
gitlab: Remove doc-tarball job
- - - - -
bdf9d978 by Ömer Sinan Ağacan at 2019-04-19T14:25:09Z
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).
(cherry picked from commit 908b4b8659713f0b7a1704ce33c7fa30e3e0ffc3)
- - - - -
12 changed files:
- .gitlab-ci.yml
- aclocal.m4
- docs/users_guide/8.8.1-notes.rst
- hadrian/doc/make.md
- hadrian/doc/user-settings.md
- hadrian/src/CommandLine.hs
- hadrian/src/Flavour.hs
- hadrian/src/Rules/Documentation.hs
- hadrian/src/Settings/Default.hs
- hadrian/src/UserSettings.hs
- rts/Apply.cmm
- rts/StgCRun.c
Changes:
=====================================
.gitlab-ci.yml
=====================================
@@ -1,17 +1,31 @@
variables:
GIT_SSL_NO_VERIFY: "1"
+ # Commit of ghc/ci-images repository from which to pull Docker images
+ DOCKER_REV: cefaee3c742af193e0f7783f87edb0d35374515c
+
before_script:
- python3 .gitlab/fix-submodules.py
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
stages:
- - lint
- - build
- - full-build
- - cleanup # See Note [Cleanup on Windows]
+ - lint # Source linting
+ - build # A quick smoke-test to weed out broken commits
+ - full-build # Build all the things
+ - cleanup # See Note [Cleanup on Windows]
+ - packaging # Source distribution, etc.
+ - hackage # head.hackage testing
+ - deploy # push documentation
+
+.only-default: &only-default
+ only:
+ - master
+ - /ghc-[0-9]+\.[0-9]+/
+ - merge_requests
+ - tags
############################################################
# Runner Tags
@@ -30,44 +44,106 @@ stages:
############################################################
ghc-linters:
+ allow_failure: true
stage: lint
- image: ghcci/linters:0.1
+ image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
script:
- - |
- if [ -n "$CI_MERGE_REQUEST_ID" ]; then
- base="$(git merge-base $CI_MERGE_REQUEST_BRANCH_NAME HEAD)"
- validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
- submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
- validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
- .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
- .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
- fi
+ - git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME
+ - base="$(git merge-base FETCH_HEAD $CI_COMMIT_SHA)"
+ - "echo Merge base $base"
+ # - validate-commit-msg .git $(git rev-list $base..$CI_COMMIT_SHA)
+ - validate-whitespace .git $(git rev-list $base..$CI_COMMIT_SHA)
+ - .gitlab/linters/check-makefiles.py $base $CI_COMMIT_SHA
+ - .gitlab/linters/check-cpp.py $base $CI_COMMIT_SHA
+ dependencies: []
+ tags:
+ - lint
+ only:
+ refs:
+ - merge_requests
+
+# We allow the submodule checker to fail when run on merge requests (to
+# accomodate, e.g., haddock changes not yet upstream) but not on `master` or
+# Marge jobs.
+.lint-submods:
+ stage: lint
+ image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
+ script:
+ - submodchecker .git $(git rev-list $base..$CI_COMMIT_SHA)
+ dependencies: []
+ tags:
+ - lint
+
+lint-submods:
+ extends: .lint-submods
+ only:
+ refs:
+ - master
+ - /ghc-[0-9]+\.[0-9]+/
+ - wip/marge_bot_batch_merge_job
+
+lint-submods-mr:
+ extends: .lint-submods
+ allow_failure: true
+ only:
+ refs:
+ - merge_requests
+
+.lint-changelogs:
+ stage: lint
+ image: "registry.gitlab.haskell.org/ghc/ci-images/linters:$DOCKER_REV"
dependencies: []
tags:
- lint
+ script:
+ - |
+ grep TBA libraries/*/changelog.md && (
+ echo "Error: Found \"TBA\"s in changelogs."
+ exit 1
+ )
+
+lint-changelogs:
+ extends: .lint-changelogs
+ allow_failure: true
+ only:
+ refs:
+ - /ghc-[0-9]+\.[0-9]+/
+
+lint-release-changelogs:
+ extends: .lint-changelogs
+ only:
+ - tags
+
############################################################
# Validation via Pipelines (hadrian)
############################################################
.validate-hadrian:
+ <<: *only-default
allow_failure: true
script:
+ - cabal update
- git clean -xdf && git submodule foreach git clean -xdf
- bash .circleci/prepare-system.sh
- if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
- ./boot
- ./configure $CONFIGURE_ARGS
- - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh`
+ - hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --docs=no-sphinx binary-dist
+ - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
cache:
key: hadrian
paths:
- cabal-cache
+ artifacts:
+ when: always
+ paths:
+ - ghc.tar.xz
validate-x86_64-linux-deb8-hadrian:
extends: .validate-hadrian
stage: build
- image: ghcci/x86_64-linux-deb8:0.1
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
before_script:
# workaround for docker permissions
- sudo chown ghc:ghc -R .
@@ -75,14 +151,17 @@ validate-x86_64-linux-deb8-hadrian:
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
tags:
- x86_64-linux
+
############################################################
# Validation via Pipelines (make)
############################################################
.validate:
+ <<: *only-default
variables:
TEST_TYPE: test
before_script:
@@ -92,22 +171,25 @@ validate-x86_64-linux-deb8-hadrian:
- ./configure $CONFIGURE_ARGS
- |
THREADS=`mk/detect-cpu-count.sh`
- make V=0 -j$THREADS
+ make V=0 -j$THREADS WERROR=-Werror
- |
make binary-dist TAR_COMP_OPTS="-1"
- mv ghc-*.tar.xz ghc.tar.xz
- |
THREADS=`mk/detect-cpu-count.sh`
- make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml
+ make $TEST_TYPE THREADS=$THREADS JUNIT_FILE=../../junit.xml METRICS_FILE=$METRICS_FILE
dependencies: []
artifacts:
reports:
junit: junit.xml
expire_in: 2 week
paths:
- - ghc.tar.xz
+ - ghc-*.tar.xz
- junit.xml
+#################################
+# x86_64-darwin
+#################################
+
validate-x86_64-darwin:
extends: .validate
stage: full-build
@@ -115,17 +197,20 @@ validate-x86_64-darwin:
- x86_64-darwin
variables:
GHC_VERSION: 8.6.3
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-apple-darwin.tar.xz"
MACOSX_DEPLOYMENT_TARGET: "10.7"
# Only Sierra and onwards supports clock_gettime. See #12858
ac_cv_func_clock_gettime: "no"
LANG: "en_US.UTF-8"
CONFIGURE_ARGS: --with-intree-gmp
+ TEST_ENV: "x86_64-darwin"
before_script:
- git clean -xdf && git submodule foreach git clean -xdf
- python3 .gitlab/fix-submodules.py
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
- bash .gitlab/darwin-init.sh
- PATH="`pwd`/toolchain/bin:$PATH"
@@ -150,6 +235,12 @@ validate-x86_64-darwin:
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
+ # Build hyperlinked sources for documentation when building releases
+ - |
+ if [[ -n "$CI_COMMIT_TAG" ]]; then
+ echo "EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump" >> mk/build.mk
+ fi
- bash .circleci/prepare-system.sh
# workaround for docker permissions
@@ -162,22 +253,31 @@ validate-x86_64-darwin:
- cabal-cache
- toolchain
-validate-aarch64-linux-deb9:
+#################################
+# aarch64-linux-deb9
+#################################
+
+.build-aarch64-linux-deb9:
extends: .validate-linux
stage: full-build
- image: ghcci/aarch64-linux-deb9:0.1
+ image: "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-deb9:$DOCKER_REV"
allow_failure: true
- artifacts:
- when: always
- expire_in: 2 week
+ variables:
+ TEST_ENV: "aarch64-linux-deb9"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-aarch64-linux-deb9.tar.xz"
cache:
key: linux-aarch64-deb9
tags:
- aarch64-linux
+validate-aarch64-linux-deb9:
+ extends: .build-aarch64-linux-deb9
+ artifacts:
+ when: always
+ expire_in: 2 week
+
nightly-aarch64-linux-deb9:
- extends: validate-aarch64-linux-deb9
- stage: full-build
+ extends: .build-aarch64-linux-deb9
artifacts:
expire_in: 2 year
variables:
@@ -186,22 +286,28 @@ nightly-aarch64-linux-deb9:
variables:
- $NIGHTLY
-validate-i386-linux-deb9:
+#################################
+# i386-linux-deb9
+#################################
+
+.build-i386-linux-deb9:
extends: .validate-linux
stage: full-build
- image: ghcci/i386-linux-deb9:0.1
- allow_failure: true
+ image: "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-deb9:$DOCKER_REV"
+ variables:
+ TEST_ENV: "i386-linux-deb9"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-i386-deb9-linux.tar.xz"
+ cache:
+ key: linux-i386-deb9
+
+validate-i386-linux-deb9:
+ extends: .build-i386-linux-deb9
artifacts:
when: always
expire_in: 2 week
- cache:
- key: linux-i386-deb9
nightly-i386-linux-deb9:
- extends: .validate-linux
- stage: full-build
- image: ghcci/i386-linux-deb9:0.1
- allow_failure: true
+ extends: .build-i386-linux-deb9
variables:
TEST_TYPE: slowtest
artifacts:
@@ -210,22 +316,29 @@ nightly-i386-linux-deb9:
only:
variables:
- $NIGHTLY
+
+#################################
+# x86_64-linux-deb9
+#################################
+
+.build-x86_64-linux-deb9:
+ extends: .validate-linux
+ stage: full-build
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb9:$DOCKER_REV"
+ variables:
+ TEST_ENV: "x86_64-linux-deb9"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux.tar.xz"
cache:
- key: linux-i386-deb9
+ key: linux-x86_64-deb9
validate-x86_64-linux-deb9:
- extends: .validate-linux
- stage: build
- image: ghcci/x86_64-linux-deb9:0.2
+ extends: .build-x86_64-linux-deb9
artifacts:
when: always
expire_in: 2 week
- cache:
- key: linux-x86_64-deb9
nightly-x86_64-linux-deb9:
- extends: validate-x86_64-linux-deb9
- stage: build
+ extends: .build-x86_64-linux-deb9
artifacts:
expire_in: 2 year
variables:
@@ -234,70 +347,96 @@ nightly-x86_64-linux-deb9:
variables:
- $NIGHTLY
+# N.B. Has DEBUG assertions enabled in stage2
+validate-x86_64-linux-deb9-debug:
+ extends: .build-x86_64-linux-deb9
+ stage: build
+ variables:
+ BUILD_FLAVOUR: validate
+ TEST_ENV: "x86_64-linux-deb9-debug"
+
validate-x86_64-linux-deb9-llvm:
- extends: .validate-linux
+ extends: .build-x86_64-linux-deb9
stage: full-build
allow_failure: true
- image: ghcci/x86_64-linux-deb9:0.2
variables:
BUILD_FLAVOUR: perf-llvm
- cache:
- key: linux-x86_64-deb9
-
-validate-x86_64-linux-deb8:
- extends: .validate-linux
- stage: full-build
- image: ghcci/x86_64-linux-deb8:0.1
- cache:
- key: linux-x86_64-deb8
- artifacts:
- when: always
- expire_in: 2 week
-
-validate-x86_64-linux-fedora27:
- extends: .validate-linux
- stage: full-build
- image: ghcci/x86_64-linux-fedora27:0.1
- cache:
- key: linux-x86_64-fedora27
- artifacts:
- when: always
- expire_in: 2 week
+ TEST_ENV: "x86_64-linux-deb9-llvm"
validate-x86_64-linux-deb9-integer-simple:
- extends: .validate-linux
+ extends: .build-x86_64-linux-deb9
stage: full-build
+ allow_failure: true
variables:
INTEGER_LIBRARY: integer-simple
- image: ghcci/x86_64-linux-deb9:0.2
- cache:
- key: linux-x86_64-deb9
+ TEST_ENV: "x86_64-linux-deb9-integer-simple"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb9-linux-integer-simple.tar.xz"
nightly-x86_64-linux-deb9-integer-simple:
- extends: validate-x86_64-linux-deb9-integer-simple
+ extends: .build-x86_64-linux-deb9
stage: full-build
- artifacts:
- expire_in: 2 year
variables:
+ INTEGER_LIBRARY: integer-simple
+ TEST_ENV: "x86_64-linux-deb9-integer-simple"
TEST_TYPE: slowtest
+ artifacts:
+ expire_in: 2 year
only:
variables:
- $NIGHTLY
validate-x86_64-linux-deb9-unreg:
- extends: .validate-linux
+ extends: .build-x86_64-linux-deb9
stage: full-build
+ allow_failure: true
variables:
CONFIGURE_ARGS: --enable-unregisterised
- image: ghcci/x86_64-linux-deb9:0.2
+ TEST_ENV: "x86_64-linux-deb9-unreg"
+
+
+#################################
+# x86_64-linux-deb8
+#################################
+
+release-x86_64-linux-deb8:
+ extends: .validate-linux
+ stage: full-build
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-deb8:$DOCKER_REV"
+ variables:
+ TEST_ENV: "x86_64-linux-deb8"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-deb8-linux.tar.xz"
+ only:
+ - tags
cache:
- key: linux-x86_64-deb9
+ key: linux-x86_64-deb8
+ artifacts:
+ when: always
+ expire_in: 2 week
+
+
+#################################
+# x86_64-linux-fedora27
+#################################
+
+validate-x86_64-linux-fedora27:
+ extends: .validate-linux
+ stage: full-build
+ image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora27:$DOCKER_REV"
+ variables:
+ TEST_ENV: "x86_64-linux-fedora27"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-fedora27-linux.tar.xz"
+ cache:
+ key: linux-x86_64-fedora27
+ artifacts:
+ when: always
+ expire_in: 2 week
############################################################
# Validation via Pipelines (Windows)
############################################################
-.validate-windows:
+.build-windows:
+ <<: *only-default
before_script:
- git clean -xdf
- git submodule foreach git clean -xdf
@@ -314,72 +453,132 @@ validate-x86_64-linux-deb9-unreg:
- git submodule sync --recursive
- git submodule update --init --recursive
- git checkout .gitmodules
+ - "git fetch https://gitlab.haskell.org/ghc/ghc-performance-notes.git refs/notes/perf:refs/notes/perf || true"
- bash .gitlab/win32-init.sh
after_script:
- rd /s /q tmp
- robocopy /np /nfl /ndl /e "%APPDATA%\cabal" cabal-cache
- bash -c 'make clean || true'
dependencies: []
+ variables:
+ FORCE_SYMLINKS: 1
+ LANG: "en_US.UTF-8"
cache:
paths:
- cabal-cache
- ghc-8.6.2
- ghc-tarballs
-validate-x86_64-windows-hadrian:
- extends: .validate-windows
+.build-windows-hadrian:
+ extends: .build-windows
stage: full-build
+ allow_failure: true
variables:
GHC_VERSION: "8.6.2"
- LANG: "en_US.UTF-8"
script:
- |
- set MSYSTEM=MINGW64
python boot
bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
- mkdir -p _build
- cp -R inplace/mingw _build/mingw
- - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick"
- # FIXME: Bindist disabled due to #16073
- #- bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh binary-dist"
+ - bash -c "PATH=`pwd`/toolchain/bin:$PATH hadrian/build.cabal.sh -j`mk/detect-cpu-count.sh` --flavour=Quick --docs=no-sphinx binary-dist"
+ - mv _build/bindist/ghc*.tar.xz ghc.tar.xz
# FIXME: Testsuite disabled due to #16156.
- #- bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
- cache:
- key: x86_64-windows
+ # - bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
tags:
- x86_64-windows
+ artifacts:
+ when: always
+ paths:
+ - ghc.tar.xz
-validate-x86_64-windows:
- extends: .validate-windows
+validate-x86_64-windows-hadrian:
+ extends: .build-windows-hadrian
+ variables:
+ MSYSTEM: MINGW64
+ cache:
+ key: x86_64-windows-hadrian
+
+nightly-i386-windows-hadrian:
+ extends: .build-windows-hadrian
+ variables:
+ MSYSTEM: MINGW32
+ only:
+ variables:
+ - $NIGHTLY
+ cache:
+ key: i386-windows-hadrian
+
+.build-windows-make:
+ extends: .build-windows
stage: full-build
# due to #16084
allow_failure: true
variables:
+ BUILD_FLAVOUR: "quick"
GHC_VERSION: "8.6.2"
- LANG: "en_US.UTF-8"
+ BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-x86_64-mingw32.tar.xz"
script:
- |
- set MSYSTEM=MINGW64
python boot
- bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex'
- - bash -c "echo include mk/flavours/quick.mk > mk/build.mk"
+ bash -c './configure --enable-tarballs-autodownload GHC=`pwd`/toolchain/bin/ghc HAPPY=`pwd`/toolchain/bin/happy ALEX=`pwd`/toolchain/bin/alex $CONFIGURE_ARGS'
+ - bash -c "echo include mk/flavours/${BUILD_FLAVOUR}.mk > mk/build.mk"
- bash -c "PATH=`pwd`/toolchain/bin:$PATH make -j`mk/detect-cpu-count.sh`"
- - |
- bash -c "make binary-dist TAR_COMP_OPTS=-1"
- mv ghc-*.tar.xz ghc.tar.xz
+ - bash -c "PATH=`pwd`/toolchain/bin:$PATH make binary-dist TAR_COMP_OPTS=-1"
- bash -c 'make V=0 test THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../junit.xml'
- cache:
- key: x86_64-windows
tags:
- x86_64-windows
artifacts:
when: always
+ expire_in: 2 week
reports:
junit: junit.xml
paths:
- - ghc.tar.xz
+ - ghc-*.tar.xz
- junit.xml
+validate-x86_64-windows:
+ extends: .build-windows-make
+ variables:
+ MSYSTEM: MINGW64
+ CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
+ cache:
+ key: x86_64-windows
+
+# Normal Windows validate builds are profiled; that won't do for releases.
+release-x86_64-windows:
+ extends: validate-x86_64-windows
+ variables:
+ MSYSTEM: MINGW64
+ BUILD_FLAVOUR: "perf"
+ CONFIGURE_ARGS: "--target=x86_64-unknown-mingw32"
+ only:
+ - tags
+
+release-i386-windows:
+ extends: .build-windows-make
+ only:
+ - tags
+ variables:
+ MSYSTEM: MINGW32
+ BUILD_FLAVOUR: "perf"
+ CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
+ cache:
+ key: i386-windows
+
+nightly-i386-windows:
+ extends: .build-windows-make
+ only:
+ variables:
+ - $NIGHTLY
+ variables:
+ MSYSTEM: MINGW32
+ CONFIGURE_ARGS: "--target=i386-unknown-mingw32"
+ cache:
+ key: i386-windows
+
+############################################################
+# Cleanup
+############################################################
+
# Note [Cleaning up after shell executor]
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
@@ -393,6 +592,7 @@ validate-x86_64-windows:
# See Note [Cleanup after shell executor]
cleanup-windows:
+ <<: *only-default
stage: cleanup
tags:
- x86_64-windows
@@ -415,10 +615,12 @@ cleanup-windows:
# See Note [Cleanup after shell executor]
cleanup-darwin:
+ <<: *only-default
stage: cleanup
tags:
- x86_64-darwin
when: always
+ dependencies: []
before_script:
- echo "Time to clean up"
script:
@@ -430,3 +632,65 @@ cleanup-darwin:
- rm -Rf $BUILD_DIR/*
- exit 0
+############################################################
+# Packaging
+############################################################
+
+source-tarball:
+ stage: packaging
+ tags:
+ - x86_64-linux
+ image: ghcci/x86_64-linux-deb9:0.2
+ only:
+ - tags
+ artifacts:
+ paths:
+ - ghc-*.tar.xz
+ - version
+ script:
+ - mk/get-win32-tarballs.sh download all
+ - ./boot
+ - ./configure
+ - make sdist
+ - mv sdistprep/*.xz .
+ - make show VALUE=version > version
+
+
+############################################################
+# Testing via head.hackage
+############################################################
+
+# Triggering jobs in the ghc/head.hackage project requires that we have a job
+# token for that repository. Furthermore the head.hackage CI job must have
+# access to an unprivileged access token with the ability to query the ghc/ghc
+# project such that it can find the job ID of the fedora27 job for the current
+# pipeline.
+
+.hackage:
+ <<: *only-default
+ stage: hackage
+ image: ghcci/x86_64-linux-deb9:0.2
+ tags:
+ - x86_64-linux
+ dependencies: []
+ variables:
+ HEAD_HACKAGE_PROJECT_ID: "78"
+ script:
+ - bash .gitlab/start-head.hackage.sh
+
+hackage:
+ extends: .hackage
+ when: manual
+
+hackage-label:
+ extends: .hackage
+ only:
+ variables:
+ - $CI_MERGE_REQUEST_LABELS =~ /.*user-facing.*/
+
+nightly-hackage:
+ extends: .hackage
+ only:
+ variables:
+ - $NIGHTLY
+
=====================================
aclocal.m4
=====================================
@@ -288,11 +288,31 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
esac
}
+ dnl Note [autoconf assembler checks and -flto]
+ dnl ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ dnl
+ dnl Autoconf's AC_COMPILE_IFELSE macro is fragile in the case of checks
+ dnl which require that the assembler is run. Specifically, GCC does not run
+ dnl the assembler if invoked with `-c -flto`; it merely dumps its internal
+ dnl AST to the object file, to be compiled and assembled during the final
+ dnl link.
+ dnl
+ dnl This can cause configure checks like that for the
+ dnl .subsections_via_symbols directive to pass unexpected (see #16440),
+ dnl leading the build system to incorrectly conclude that the directive is
+ dnl supported.
+ dnl
+ dnl For this reason, it is important that configure checks that rely on the
+ dnl assembler failing use AC_LINK_IFELSE rather than AC_COMPILE_IFELSE,
+ dnl ensuring that the assembler sees the check.
+ dnl
+
dnl ** check for Apple-style dead-stripping support
dnl (.subsections-via-symbols assembler directive)
AC_MSG_CHECKING(for .subsections_via_symbols)
- AC_COMPILE_IFELSE(
+ dnl See Note [autoconf assembler checks and -flto]
+ AC_LINK_IFELSE(
[AC_LANG_PROGRAM([], [__asm__ (".subsections_via_symbols");])],
[AC_MSG_RESULT(yes)
HaskellHaveSubsectionsViaSymbols=True
@@ -305,8 +325,9 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
dnl ** check for .ident assembler directive
AC_MSG_CHECKING(whether your assembler supports .ident directive)
- AC_COMPILE_IFELSE(
- [AC_LANG_SOURCE([__asm__ (".ident \"GHC x.y.z\"");])],
+ dnl See Note [autoconf assembler checks and -flto]
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([__asm__ (".ident \"GHC x.y.z\"");], [])],
[AC_MSG_RESULT(yes)
HaskellHaveIdentDirective=True],
[AC_MSG_RESULT(no)
@@ -330,8 +351,15 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
;;
esac
AC_MSG_CHECKING(for GNU non-executable stack support)
- AC_COMPILE_IFELSE(
- [AC_LANG_PROGRAM([__asm__ (".section .note.GNU-stack,\"\",$progbits");], [0])],
+ dnl See Note [autoconf assembler checks and -flto]
+ AC_LINK_IFELSE(
+ dnl the `main` function is placed after the .note.GNU-stack directive
+ dnl so we need to ensure that the active segment is correctly set,
+ dnl otherwise `main` will be placed in the wrong segment.
+ [AC_LANG_PROGRAM([
+ __asm__ (".section .note.GNU-stack,\"\",$progbits");
+ __asm__ (".section .text");
+ ], [0])],
[AC_MSG_RESULT(yes)
HaskellHaveGnuNonexecStack=True],
[AC_MSG_RESULT(no)
=====================================
docs/users_guide/8.8.1-notes.rst
=====================================
@@ -206,6 +206,7 @@ for further change information.
libraries/mtl/mtl.cabal: Dependency of ``Cabal`` library
libraries/parsec/parsec.cabal: Dependency of ``Cabal`` library
libraries/process/process.cabal: Dependency of ``ghc`` library
+ libraries/pretty/pretty.cabal: Dependency of ``ghc`` library
libraries/stm/stm.cabal: Dependency of ``haskeline`` library
libraries/template-haskell/template-haskell.cabal: Core library
libraries/terminfo/terminfo.cabal: Dependency of ``haskeline`` library
=====================================
hadrian/doc/make.md
=====================================
@@ -174,6 +174,22 @@ time you fire up a build. This is not possible with the Make build system.
build docs
```
+- Build documentation, but without haddocks (resp. without HTML or PDF manuals)
+
+ ``` sh
+ # Make
+ echo 'HADDOCKS_DOCS = NO' > mk/build.mk
+ # For HTML manuals: BUILD_SPHINX_HTML = NO
+ # For PDF manuals: BUILD_SPHINX_PDF = NO
+ make
+
+ # Hadrian
+ build docs --docs=no-haddocks
+ # Append --docs=no-sphinx-pdfs, --docs=no-sphinx-html or
+ # --docs=no-sphinx-man (or --docs=no-sphinx to encompass them all)
+ # to further reduce or even completely disable documentation targets.
+ ```
+
- Running nofib
``` sh
=====================================
hadrian/doc/user-settings.md
=====================================
@@ -32,7 +32,10 @@ data Flavour = Flavour {
-- | Build profiled GHC.
ghcProfiled :: Bool,
-- | Build GHC with debug information.
- ghcDebugged :: Bool }
+ ghcDebugged :: Bool
+ -- | Whether to build docs and which ones
+ -- (haddocks, user manual, haddock manual)
+ ghcDocs :: Action DocTargets }
```
Hadrian provides several built-in flavours (`default`, `quick`, and a few
others; see `hadrian/doc/flavours.md`), which can be activated from the command line,
@@ -102,6 +105,17 @@ patterns such as `"//Prelude.*"` can be used when matching input and output file
where `//` matches an arbitrary number of path components and `*` matches an entire
path component, excluding any separators.
+### Enabling -Werror
+
+It is useful to enable `-Werror` when building GHC as this setting is
+used in the CI to ensure a warning free build. The `werror` function can be
+used to easily modify a flavour to turn this setting on.
+
+```
+devel2WerrorFlavour :: Flavour
+devel2WerrorFlavour = werror (developmentFlavour Stage2)
+```
+
## Packages
Users can add and remove packages from particular build stages. As an example,
@@ -216,6 +230,45 @@ verboseCommand = output "//rts/sm/*" &&^ way threaded
verboseCommand = return True
```
+## Documentation
+
+`Flavour`'s `ghcDocs :: Action DocTargets` field lets you
+customize the "groups" of documentation targets that should
+run when running `build docs` (or, transitively,
+`build binary-dist`).
+
+```haskell
+type DocTargets = Set DocTarget
+data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan
+```
+
+By default, `ghcDocs` contains all of them and `build docs` would
+therefore attempt to build all the haddocks, manuals and manpages.
+If, for some reason (e.g no easy way to install `sphinx-build` or
+`xelatex` on your system), you're just interested in building the
+haddocks, you could define a custom flavour as follows:
+
+```haskell
+justHaddocksFlavour :: Flavour
+justHaddocksFlavour = defaultFlavour
+ { name = "default-haddocks"
+ , ghcDocs = Set.singleton Haddocks }
+```
+
+and then run `build --flavour=default-haddocks`. Alternatively,
+you can use the `--docs` CLI flag to selectively disable some or
+all of the documentation targets:
+
+- `--docs=none`: don't build any docs
+- `--docs=no-haddocks`: don't build haddocks
+- `--docs=no-sphinx`: don't build any user manual or manpage
+- `--docs=no-sphinx-html`: don't build HTML versions of manuals
+- `--docs=no-sphinx-pdfs`: don't build PDF versions of manuals
+- `--docs=no-sphinx-man`: don't build the manpage
+
+You can pass several `--docs=...` flags, Hadrian will combine
+their effects.
+
## Miscellaneous
To change the default behaviour of Hadrian with respect to building split
=====================================
hadrian/src/CommandLine.hs
=====================================
@@ -1,17 +1,20 @@
module CommandLine (
optDescrs, cmdLineArgsMap, cmdFlavour, lookupFreeze1, cmdIntegerSimple,
cmdProgressColour, cmdProgressInfo, cmdConfigure, cmdSplitObjects,
- lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
+ cmdDocsArgs, lookupBuildRoot, TestArgs(..), TestSpeed(..), defaultTestArgs
) where
import Data.Either
import qualified Data.HashMap.Strict as Map
import Data.List.Extra
import Development.Shake hiding (Normal)
+import Flavour (DocTargets, DocTarget(..))
import Hadrian.Utilities hiding (buildRoot)
import System.Console.GetOpt
import System.Environment
+import qualified Data.Set as Set
+
data TestSpeed = Slow | Average | Fast deriving (Show, Eq)
-- | All arguments that can be passed to Hadrian via the command line.
@@ -24,7 +27,8 @@ data CommandLineArgs = CommandLineArgs
, progressInfo :: ProgressInfo
, splitObjects :: Bool
, buildRoot :: BuildRoot
- , testArgs :: TestArgs }
+ , testArgs :: TestArgs
+ , docTargets :: DocTargets }
deriving (Eq, Show)
-- | Default values for 'CommandLineArgs'.
@@ -38,7 +42,8 @@ defaultCommandLineArgs = CommandLineArgs
, progressInfo = Brief
, splitObjects = False
, buildRoot = BuildRoot "_build"
- , testArgs = defaultTestArgs }
+ , testArgs = defaultTestArgs
+ , docTargets = Set.fromList [minBound..maxBound] }
-- | These arguments are used by the `test` target.
data TestArgs = TestArgs
@@ -179,6 +184,25 @@ readTestWay way =
let newWays = way : testWays (testArgs flags)
in flags { testArgs = (testArgs flags) {testWays = newWays} }
+readDocsArg :: Maybe String -> Either String (CommandLineArgs -> CommandLineArgs)
+readDocsArg ms = maybe (Left "Cannot parse docs argument") (Right . set) (go =<< ms)
+
+ where
+ go :: String -> Maybe (DocTargets -> DocTargets)
+ go "none" = Just (const Set.empty)
+ go "no-haddocks" = Just (Set.delete Haddocks)
+ go "no-sphinx-html" = Just (Set.delete SphinxHTML)
+ go "no-sphinx-pdfs" = Just (Set.delete SphinxPDFs)
+ go "no-sphinx-man" = Just (Set.delete SphinxMan)
+ go "no-sphinx" = Just (Set.delete SphinxHTML
+ . Set.delete SphinxPDFs
+ . Set.delete SphinxMan)
+ go _ = Nothing
+
+ set :: (DocTargets -> DocTargets) -> CommandLineArgs -> CommandLineArgs
+ set tweakTargets flags = flags
+ { docTargets = tweakTargets (docTargets flags) }
+
-- | Standard 'OptDescr' descriptions of Hadrian's command line arguments.
optDescrs :: [OptDescr (Either String (CommandLineArgs -> CommandLineArgs))]
optDescrs =
@@ -198,6 +222,8 @@ optDescrs =
"Progress info style (None, Brief, Normal or Unicorn)."
, Option [] ["split-objects"] (NoArg readSplitObjects)
"Generate split objects (requires a full clean rebuild)."
+ , Option [] ["docs"] (OptArg readDocsArg "TARGET")
+ "Strip down docs targets (none, no-haddocks, no-sphinx[-{html, pdfs, man}]."
, Option [] ["test-compiler"] (OptArg readTestCompiler "TEST_COMPILER")
"Use given compiler [Default=stage2]."
, Option [] ["test-config-file"] (OptArg readTestConfigFile "CONFIG_FILE")
@@ -259,3 +285,6 @@ cmdProgressInfo = progressInfo <$> cmdLineArgs
cmdSplitObjects :: Action Bool
cmdSplitObjects = splitObjects <$> cmdLineArgs
+
+cmdDocsArgs :: Action DocTargets
+cmdDocsArgs = docTargets <$> cmdLineArgs
=====================================
hadrian/src/Flavour.hs
=====================================
@@ -1,6 +1,10 @@
-module Flavour (Flavour (..)) where
+module Flavour
+ ( Flavour (..), werror
+ , DocTargets, DocTarget(..)
+ ) where
import Expression
+import Data.Set (Set)
-- Please update doc/{flavours.md, user-settings.md} when changing this file.
-- | 'Flavour' is a collection of build settings that fully define a GHC build.
@@ -31,4 +35,33 @@ data Flavour = Flavour {
-- | Build profiled GHC.
ghcProfiled :: Bool,
-- | Build GHC with debug information.
- ghcDebugged :: Bool }
+ ghcDebugged :: Bool,
+ -- | Whether to build docs and which ones
+ -- (haddocks, user manual, haddock manual)
+ ghcDocs :: Action DocTargets }
+
+-- | A set of documentation targets
+type DocTargets = Set DocTarget
+
+-- | Documentation targets
+--
+-- While we can't reasonably expose settings or CLI options
+-- to selectively disable, say, base's haddocks, we can offer
+-- a less fine-grained choice:
+--
+-- - haddocks for libraries
+-- - non-haddock html pages (e.g GHC's user manual)
+-- - PDF documents (e.g haddock's manual)
+-- - man pages (GHC's)
+--
+-- The main goal being to have easy ways to do away with the need
+-- for e.g @sphinx-build@ or @xelatex@ and associated packages
+-- while still being able to build a(n almost) complete binary
+-- distribution.
+data DocTarget = Haddocks | SphinxHTML | SphinxPDFs | SphinxMan
+ deriving (Eq, Ord, Show, Bounded, Enum)
+
+-- | Turn on -Werror for packages built with the stage1 compiler.
+-- It mimics the CI settings so is useful to turn on when developing.
+werror :: Flavour -> Flavour
+werror fl = fl { args = args fl <> (builder Ghc ? notStage0 ? arg "-Werror") }
=====================================
hadrian/src/Rules/Documentation.hs
=====================================
@@ -22,6 +22,7 @@ import Target
import Utilities
import Data.List (union)
+import qualified Data.Set as Set
import qualified Text.Parsec as Parsec
docRoot :: FilePath
@@ -79,10 +80,35 @@ documentationRules = do
-- Haddock's manual, and builds man pages
"docs" ~> do
root <- buildRoot
+ doctargets <- ghcDocs =<< flavour
let html = htmlRoot -/- "index.html" -- also implies "docs-haddock"
archives = map pathArchive docPaths
pdfs = map pathPdf $ docPaths \\ ["libraries"]
- need $ map (root -/-) $ [html] ++ archives ++ pdfs ++ [manPageBuildPath]
+
+ targets = -- include PDFs unless --docs=no-sphinx[-pdf] is
+ -- passed.
+ concat [ pdfs | SphinxPDFs `Set.member` doctargets ]
+
+ -- include manpage unless --docs=no-sphinx[-man] is given.
+ ++ [ manPageBuildPath | SphinxMan `Set.member` doctargets ]
+
+ -- include toplevel html target uness we neither want
+ -- haddocks nor html pages produced by sphinx.
+ ++ [ html | Set.size (doctargets `Set.intersection`
+ Set.fromList [Haddocks, SphinxHTML]
+ ) > 0 ]
+
+ -- include archives for whatever targets remain from
+ -- the --docs arguments we got.
+ ++ [ ar
+ | (ar, doc) <- zip archives docPaths
+ , archiveTarget doc `Set.member` doctargets ]
+
+ need $ map (root -/-) targets
+
+ where archiveTarget "libraries" = Haddocks
+ archiveTarget _ = SphinxHTML
+
------------------------------------- HTML -------------------------------------
@@ -94,7 +120,16 @@ buildHtmlDocumentation = do
root <- buildRootRules
root -/- htmlRoot -/- "index.html" %> \file -> do
- need $ map ((root -/-) . pathIndex) docPaths
+ doctargets <- ghcDocs =<< flavour
+
+ -- We include the HTML output of haddock for libraries unless
+ -- told not to (e.g with --docs=no-haddocks). Likewise for
+ -- the HTML version of the users guide or the Haddock manual.
+ let targets = [ "libraries" | Haddocks `Set.member` doctargets ]
+ ++ concat [ ["users_guide", "Haddock"]
+ | SphinxHTML `Set.member` doctargets ]
+ need $ map ((root -/-) . pathIndex) targets
+
copyFileUntracked "docs/index.html" file
-- | Compile a Sphinx ReStructured Text package to HTML.
=====================================
hadrian/src/Settings/Default.hs
=====================================
@@ -222,7 +222,8 @@ defaultFlavour = Flavour
, dynamicGhcPrograms = defaultDynamicGhcPrograms
, ghciWithDebugger = False
, ghcProfiled = False
- , ghcDebugged = False }
+ , ghcDebugged = False
+ , ghcDocs = cmdDocsArgs }
-- | Default logic for determining whether to build
-- dynamic GHC programs.
=====================================
hadrian/src/UserSettings.hs
=====================================
@@ -2,6 +2,10 @@
-- hadrian/src/UserSettings.hs to hadrian/UserSettings.hs and edit your copy.
-- If you don't copy the file your changes will be tracked by git and you can
-- accidentally commit them.
+--
+-- See doc/user-settings.md for instructions, and src/Flavour.hs for auxiliary
+-- functions for manipulating flavours.
+-- Please update doc/user-settings.md when committing changes to this file.
module UserSettings (
userFlavours, userPackages, userDefaultFlavour,
verboseCommand, buildProgressColour, successColour, finalStage
=====================================
rts/Apply.cmm
=====================================
@@ -60,7 +60,7 @@ stg_ap_0_fast ( P_ fun )
again:
W_ info;
- W_ untaggedfun;
+ P_ untaggedfun;
W_ arity;
untaggedfun = UNTAG(fun);
info = %INFO_PTR(untaggedfun);
@@ -106,6 +106,11 @@ again:
pap = Hp - SIZEOF_StgPAP + WDS(1);
SET_HDR(pap, stg_PAP_info, CCCS);
StgPAP_arity(pap) = arity;
+ if (arity <= TAG_MASK) {
+ // TODO: Shouldn't this already be tagged? If not why did we
+ // untag it at the beginning of this function?
+ fun = untaggedfun + arity;
+ }
StgPAP_fun(pap) = fun;
StgPAP_n_args(pap) = 0;
return (pap);
@@ -117,9 +122,8 @@ again:
return (fun);
} else {
// We're going to copy this PAP, and put the new CCS in it
- fun = untaggedfun;
W_ size;
- size = SIZEOF_StgPAP + WDS(TO_W_(StgPAP_n_args(fun)));
+ size = SIZEOF_StgPAP + WDS(TO_W_(StgPAP_n_args(untaggedfun)));
HP_CHK_GEN(size);
TICK_ALLOC_PAP(size, 0);
// attribute this allocation to the "overhead of profiling"
@@ -127,13 +131,13 @@ again:
P_ pap;
pap = Hp - size + WDS(1);
// We'll lose the original PAP, so we should enter its CCS
- ccall enterFunCCS(BaseReg "ptr", StgHeader_ccs(fun) "ptr");
+ ccall enterFunCCS(BaseReg "ptr", StgHeader_ccs(untaggedfun) "ptr");
SET_HDR(pap, stg_PAP_info, CCCS);
- StgPAP_arity(pap) = StgPAP_arity(fun);
- StgPAP_n_args(pap) = StgPAP_n_args(fun);
+ StgPAP_arity(pap) = StgPAP_arity(untaggedfun);
+ StgPAP_n_args(pap) = StgPAP_n_args(untaggedfun);
StgPAP_fun(pap) = StgPAP_fun(fun);
W_ i;
- i = TO_W_(StgPAP_n_args(fun));
+ i = TO_W_(StgPAP_n_args(untaggedfun));
loop:
if (i == 0) {
return (pap);
=====================================
rts/StgCRun.c
=====================================
@@ -494,15 +494,15 @@ StgRunIsImplementedInAssembler(void)
"movq 48(%%rsp),%%rdi\n\t"
"movq 56(%%rsp),%%rsi\n\t"
"movq 64(%%rsp),%%xmm6\n\t"
- "movq 72(%%rax),%%xmm7\n\t"
- "movq 80(%%rax),%%xmm8\n\t"
- "movq 88(%%rax),%%xmm9\n\t"
- "movq 96(%%rax),%%xmm10\n\t"
- "movq 104(%%rax),%%xmm11\n\t"
- "movq 112(%%rax),%%xmm12\n\t"
- "movq 120(%%rax),%%xmm13\n\t"
- "movq 128(%%rax),%%xmm14\n\t"
- "movq 136(%%rax),%%xmm15\n\t"
+ "movq 72(%%rsp),%%xmm7\n\t"
+ "movq 80(%%rsp),%%xmm8\n\t"
+ "movq 88(%%rsp),%%xmm9\n\t"
+ "movq 96(%%rsp),%%xmm10\n\t"
+ "movq 104(%%rsp),%%xmm11\n\t"
+ "movq 112(%%rsp),%%xmm12\n\t"
+ "movq 120(%%rsp),%%xmm13\n\t"
+ "movq 128(%%rsp),%%xmm14\n\t"
+ "movq 136(%%rsp),%%xmm15\n\t"
#endif
"addq %1, %%rsp\n\t"
"retq"
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/2ea424ea10e30105f9cb4f7d4368d055e67c54c2...bdf9d978274a3f624af771b0a519196137871603
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/2ea424ea10e30105f9cb4f7d4368d055e67c54c2...bdf9d978274a3f624af771b0a519196137871603
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20190419/a760d03f/attachment-0001.html>
More information about the ghc-commits
mailing list