[Git][ghc/ghc][wip/armv7-ci] 14 commits: Add a few missing llvm-targets

Ben Gamari gitlab at gitlab.haskell.org
Thu Jun 13 16:37:00 UTC 2019



Ben Gamari pushed to branch wip/armv7-ci at Glasgow Haskell Compiler / GHC


Commits:
5ffc266e by Ben Gamari at 2019-06-13T06:48:13Z
Add a few missing llvm-targets

This should finally fix #14261.

[skip ci]

- - - - -
fc6b23be by Phuong Trinh at 2019-06-13T06:48:50Z
Fix #16525: ObjectCode freed wrongly because of lack of info header check

`checkUnload` currently doesn't check the info header of static objects.
Thus, it may free an `ObjectCode` struct wrongly even if there's still a
live static object whose info header lies in a mapped section of that
`ObjectCode`. This fixes the issue by adding an appropriate check.

- - - - -
a657543c by Ben Gamari at 2019-06-13T06:49:25Z
PrelRules: Ensure that string unpack/append rule fires with source notes

Previously the presence of source notes could hide nested applications
of `unpackFoldrCString#` from our constant folding logic. For instance,
consider the expression:

```haskell
unpackFoldrCString# "foo" c (unpackFoldrCString# "baz" c n)
```

Specifically, ticks appearing in two places can defeat the rule:

  a. Surrounding the inner application of `unpackFoldrCString#`
  b. Surrounding the fold function, `c`

The latter caused the `str_rules` testcase to fail when `base` was built
with `-g3`.

Fixes #16740.

- - - - -
e98d32a6 by David Eichmann at 2019-06-13T06:50:00Z
Hadrian: Track RTS library symlink targets

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

- - - - -
35113117 by Alp Mestanogullari at 2019-06-13T06:50:37Z
Hadrian: Do not allow the Linux jobs to fail anymore

MR !1151 makes the Hadrian/Linux job pass by fixing the last two test failures,
so we can now be stricter and not allow those jobs to fail anymore, easily
letting us see when patches introduce test failures.

- - - - -
70b5eefe by Ben Gamari at 2019-06-13T06:51:13Z
users-guide: Fix a few markup issues

Strangely these were only causing the build to fail in the aarch64-linux
job, despite Sphinx throwing errors in all jobs I checked.

Also changes some `#ifdef`s to `#if defined` to satisfy the linter.

- - - - -
9721b40d by Ben Gamari at 2019-06-13T06:51:13Z
gitlab-ci: Don't build PDF user's guide on AArch64

For reasons I don't understand sphinx seems to fail to produce a .idx
file for makeindex.

- - - - -
d550b771 by Ben Gamari at 2019-06-13T06:51:50Z
Clean up .circleci

Move prepare-system.sh to .gitlab and remove everything else.

- - - - -
c53dfb3b by Ben Gamari at 2019-06-13T15:52:47Z
testsuite: A more portable solution to #9399

Previously we used an awful hybrid batch script/Bourne shell script to
allow this test to run both on Windows and Linux (fixing #9399).
However, this breaks on some libc implementations (e.g. musl). Fix this.

Fixes #16798.

- - - - -
74b5d049 by Ben Gamari at 2019-06-13T15:53:22Z
gitlab-ci: Disable deb9-llvm job, introduce nightly LLVM job

This should help alleviate queue times as the LLVM job is one of the
longest that we have.

- - - - -
5ce63d52 by Ben Gamari at 2019-06-13T15:53:22Z
gitlab-ci: Disable validate-x86_64-linux-deb9 job to reduce load

Enable artifacts on to ensure we have bindist coverage.

- - - - -
bc6e6d7e by Ben Gamari at 2019-06-13T16:36:29Z
gitlab-ci: Produce ARMv7 binary distributions

- - - - -
8f644bc3 by Ben Gamari at 2019-06-13T16:36:29Z
XXX: Test

- - - - -
bc143e59 by Ben Gamari at 2019-06-13T16:36:29Z
Bump docker image

- - - - -


29 changed files:

- − .circleci/config.yml
- − .circleci/fetch-submodules.sh
- − .circleci/push-test-metrics.sh
- .gitlab-ci.yml
- .circleci/prepare-system.sh → .gitlab/prepare-system.sh
- compiler/prelude/PrelRules.hs
- docs/users_guide/ffi-chap.rst
- docs/users_guide/ghci.rst
- hadrian/src/Hadrian/Utilities.hs
- hadrian/src/Rules/Library.hs
- hadrian/src/Rules/Program.hs
- hadrian/src/Rules/Register.hs
- hadrian/src/Rules/Rts.hs
- libraries/base/tests/all.T
- libraries/base/tests/enum01.hs
- libraries/base/tests/enum02.hs
- libraries/base/tests/enum03.hs
- libraries/base/tests/enum_processor.bat
- libraries/base/tests/enum_processor.py
- llvm-targets
- rts/CheckUnload.c
- rts/Linker.c
- rts/linker/M32Alloc.c
- + testsuite/tests/ghci/T16525a/A.hs
- + testsuite/tests/ghci/T16525a/B.hs
- + testsuite/tests/ghci/T16525a/T16525a.script
- + testsuite/tests/ghci/T16525a/T16525a.stdout
- + testsuite/tests/ghci/T16525a/all.T
- utils/llvm-targets/gen-data-layout.sh


Changes:

=====================================
.circleci/config.yml deleted
=====================================
@@ -1,461 +0,0 @@
-# Questions about this file?
-# See https://gitlab.haskell.org/ghc/ghc/wikis/continuous-integration/usage.
-
-version: 2
-
-aliases:
-  - &defaults
-    working_directory: ~/ghc
-  - &prepare
-    run:
-      name: prepare-system
-      command: .circleci/prepare-system.sh
-  - &submodules
-    run:
-      name: submodules
-      command: .circleci/fetch-submodules.sh
-  - &buildenv
-    # ideally we would simply set THREADS here instead of re-detecting it every
-    # time we need it below. Unfortunately, there is no way to set an environment
-    # variable with the result of a shell script.
-    SKIP_PERF_TESTS: NO
-    VERBOSE: 2
-  - &boot
-    run:
-      name: Boot
-      command: |
-        ./boot
-  - &set_git_identity
-      run:
-        name: Set Git Identity
-        command: |
-          git config user.email "ghc-circleci at haskell.org"
-          git config user.name "GHC CircleCI"
-  - &configure_unix
-    run:
-      name: Configure
-      command: ./configure 
-  - &configure_unix_32
-    run:
-      name: Configure
-      command: |
-        setarch i386 ./configure --with-ghc=/opt/ghc-i386/8.4.2/bin/ghc
-  - &configure_bsd
-    run:
-      name: Configure
-      command: ./configure --target=x86_64-unknown-freebsd10
-  - &configure_unreg
-    run:
-      name: Configure
-      command: ./configure --enable-unregisterised
-  - &make
-    run:
-      name: Build
-      command: "make -j`mk/detect-cpu-count.sh` V=0"
-  - &build_hadrian
-    run:
-      name: Build GHC using Hadrian
-      command: |
-        cabal update
-        hadrian/build.sh -j`mk/detect-cpu-count.sh`
-  - &test
-    run:
-      name: Test
-      command: |
-        mkdir -p test-results
-        METRICS_FILE=$(mktemp)
-        echo "export METRICS_FILE=$METRICS_FILE" >> $BASH_ENV
-        make test THREADS=`mk/detect-cpu-count.sh` SKIP_PERF_TESTS=$SKIP_PERF_TESTS TEST_ENV=$TEST_ENV JUNIT_FILE=../../test-results/junit.xml METRICS_FILE=$METRICS_FILE
-  - &store_test_results
-    store_test_results:
-      path: test-results
-  - &push_perf_note
-    run:
-      name: Push Performance Git Notes
-      command: .circleci/push-test-metrics.sh
-  - &store_test_artifacts
-    store_artifacts:
-      # we might want to add the whole output of the test phase
-      # too at some point
-      path: test-results/junit.xml
-  - &slowtest
-    run:
-      name: Full Test
-      command: |
-        mkdir -p test-results
-        make slowtest SKIP_PERF_TESTS=YES THREADS=`mk/detect-cpu-count.sh` JUNIT_FILE=../../test-results/junit.xml
-  - &bindist
-    run:
-      name: Create bindist
-      # Reduce compression effort to 3
-      command: make binary-dist TAR_COMP_OPTS="-2" && mv ghc*.tar.xz ghc.tar.xz
-      # Building bindist takes ~15 minutes without output, account for
-      # that.
-      no_output_timeout: "30m"
-  - &store_bindist
-    store_artifacts:
-      path: ghc.tar.xz
-  - &only_release_tags
-    tags:
-      only: /^ghc-.*/
-  - &ignore_gitlab_branches
-    branches:
-      ignore: /^gitlab\/.*/
-
-jobs:
-  "validate-x86_64-freebsd":
-    docker:
-      - image: ghcci/x86_64-freebsd
-    environment:
-      TARGET: FreeBSD
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: x86_64-freebsd
-      TEST_ENV: x86_64-freebsd
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_bsd
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-x86_64-darwin":
-    macos:
-      xcode: "9.0"
-    environment:
-      # Disable sphinx PDF output as MacTeX apparently doesn't provide xelatex
-      BUILD_SPHINX_PDF: "NO"
-      MACOSX_DEPLOYMENT_TARGET: "10.7"
-      # Only Sierra and onwards supports clock_gettime. See #12858
-      ac_cv_func_clock_gettime: "no"
-      GHC_COLLECTOR_FLAVOR: x86_64-darwin
-      <<: *buildenv
-      TEST_ENV: x86_64-darwin
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-x86_64-linux-deb8":
-    docker:
-      - image: ghcci/x86_64-linux-deb8:0.1
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: x86_64-linux
-      TEST_ENV: x86_64-linux-deb8
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-x86_64-linux-deb9-integer-simple":
-    docker:
-      - image: ghcci/x86_64-linux-deb9:0.2
-    environment:
-      <<: *buildenv
-      INTEGER_LIBRARY: integer-simple
-      GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-x86_64-linux-deb9":
-    docker:
-      - image: ghcci/x86_64-linux-deb9:0.1
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: x86_64-linux-deb9
-      TEST_ENV: x86_64-linux-deb9
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-hadrian-x86_64-linux-deb8":
-    docker:
-      - image: ghcci/x86_64-linux-deb8:0.1
-    environment:
-      <<: *buildenv
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *build_hadrian
-
-  "validate-x86_64-linux-deb8-unreg":
-    docker:
-      - image: ghcci/x86_64-linux-deb8:0.1
-    environment:
-      <<: *buildenv
-      TEST_ENV: x86_64-linux-deb8-unreg
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unreg
-      - *make
-      - *test
-      - *store_test_results
-      - *push_perf_note
-      - *store_test_artifacts
-
-  "validate-x86_64-linux-deb9-llvm":
-    docker:
-      - image: ghcci/x86_64-linux-deb9:0.2
-    environment:
-      <<: *buildenv
-      BUILD_FLAVOUR: perf-llvm
-      TEST_ENV: x86_64-linux-deb9-llvm
-    steps:
-      - run:
-          name: Verify that llc works
-          command: llc
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  # Nightly build with -DDEBUG using devel2 flavour
-  "validate-x86_64-linux-deb8-debug":
-    docker:
-      - image: ghcci/x86_64-linux-deb8:0.1
-    environment:
-      BUILD_FLAVOUR: devel2
-      <<: *buildenv
-      TEST_ENV: x86_64-linux-deb8-debug
-      SKIP_PERF_TESTS: YES
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-i386-linux-deb9":
-    docker:
-      - image: ghcci/i386-linux-deb9:0.2
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: i386-linux-deb9
-      TEST_ENV: i386-linux-deb9
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix_32
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-i386-linux-deb8":
-    docker:
-      - image: ghcci/i386-linux-deb8:0.1
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: i386-linux
-      TEST_ENV: i386-linux-deb8
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix_32
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-x86_64-linux-centos7":
-    docker:
-      - image: ghcci/x86_64-linux-centos7:0.1
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: x86_64-centos7
-      LANG: en_US.UTF-8
-      TEST_ENV: x86_64-centos7
-      # Sphinx is too old
-      BUILD_SPHINX_PDF: NO
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "validate-x86_64-linux-fedora27":
-    docker:
-      - image: ghcci/x86_64-linux-fedora27:0.1
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: x86_64-fedora
-      TEST_ENV: x86_64-linux-fedora27
-    steps:
-      - checkout
-      - *set_git_identity
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *bindist
-      - *store_bindist
-      - *test
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-  "slow-validate-x86_64-linux-deb8":
-    docker:
-      - image: ghcci/x86_64-linux-deb8:0.1
-    environment:
-      <<: *buildenv
-      GHC_COLLECTOR_FLAVOR: x86_64-linux-deb8
-    steps:
-      - checkout
-      - *prepare
-      - *submodules
-      - *boot
-      - *configure_unix
-      - *make
-      - *slowtest
-      - *store_test_results
-      - *store_test_artifacts
-      - *push_perf_note
-
-workflows:
-  version: 2
-  validate:
-    jobs:
-    - validate-x86_64-linux-deb8:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-    # FreeBSD disabled: https://github.com/haskell/unix/issues/102
-    # - validate-x86_64-freebsd
-    - validate-x86_64-darwin:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-    - validate-x86_64-linux-deb8-llvm:
-        filters:
-          <<: *ignore_gitlab_branches
-    - validate-i386-linux-deb8:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-    - validate-x86_64-linux-deb9:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-    - validate-i386-linux-deb9:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-    - validate-x86_64-linux-centos7:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-    - validate-hadrian-x86_64-linux-deb8:
-        filters:
-          <<: *ignore_gitlab_branches
-    - validate-x86_64-linux-fedora27:
-        filters:
-          <<: [*only_release_tags, *ignore_gitlab_branches]
-
-  nightly:
-    triggers:
-      - schedule:
-          cron: "0 0 * * *"
-          filters:
-            branches:
-              only:
-                - master
-    jobs:
-    - validate-x86_64-linux-deb8-unreg
-    - validate-x86_64-linux-deb8-llvm
-    - validate-x86_64-linux-deb8-debug
-    - validate-x86_64-linux-deb9
-    - validate-x86_64-linux-deb9-integer-simple
-    - slow-validate-x86_64-linux-deb8
-
-notify:
-  webhooks:
-    - url: https://phabricator.haskell.org/harbormaster/hook/circleci/


=====================================
.circleci/fetch-submodules.sh deleted
=====================================
@@ -1,9 +0,0 @@
-#!/usr/bin/env bash
-
-set -euo pipefail
-
-# Use github.com/ghc for those submodule repositories we couldn't connect to.
-git config remote.origin.url git://github.com/ghc/ghc.git
-git config --global url."git://github.com/ghc/packages-".insteadOf git://github.com/ghc/packages/
-git submodule init # Don't be quiet, we want to show these urls.
-git submodule --quiet update --recursive # Now we can be quiet again.


=====================================
.circleci/push-test-metrics.sh deleted
=====================================
@@ -1,50 +0,0 @@
-#!/usr/bin/env bash
-# vim: sw=2 et
-set -euo pipefail
-
-fail() {
-  echo "ERROR: $*" >&2
-  exit 1
-}
-
-if [ "$CIRCLE_REPOSITORY_URL" != "git at github.com:ghc/ghc.git" ]; then
-  exit 0
-fi
-
-GHC_ORIGIN=git at git.haskell.org:ghc
-
-# Add git.haskell.org as a known host.
-echo "|1|F3mPVCE55+KfApNIMYQ3Dv39sGE=|1bRkvJEJhAN2R0LE/lAjFCEJGl0= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBBUZS9jGBkE5UzpSo6irnIgcQcfzvbuIOsFc8+N61FwtZncRntbaKPuUimOFPgeaUZLl6Iajz6IIs7aduU0/v+I=" >> ~/.ssh/known_hosts
-echo "|1|2VUMjYSRVpT2qJPA0rA9ap9xILY=|5OThkI4ED9V0J+Es7D5FOD55Klk= ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+3TLluLAO4lkW60W+N2DFkS+WoRFGqLwHzgd1ifxG9TIm31wChPY3E/hgMnJmgGqWCF4UDUemmyCycEaL7FtKfzjTAclg9EfpQnozyE3T5hIo2WL7SN5O8ttG/bYGuDnn14jLnWwJyN4oz/znWFiDG9e2Oc9YFNlQ+PK8ae5xR4gqBB7EOoj9J1EiPqG2OXRr5Mei3TLsRDU6fnz/e4oFJpKWWeN6M63oePv0qoaGjxcrATZUWsuWrxVMmYo9kP1xRuFJbAUw2m4uVP+793SW1zxySi1HBMtJG+gCDdZZSwYbkV1hassLWBHv1qPttncfX8Zek3Z3VolaTmfWJTo9" >> ~/.ssh/known_hosts
-
-# Check that a git notes dont already exist.
-# This is a percausion as we reset refs/notes/perf and we want to avoid data loss.
-if [ $(git notes --ref=perf list | wc -l) -ne 0 ]
-then
-  fail "Found an existing git note on HEAD. Expected no git note."
-fi
-
-# Assert that the METRICS_FILE exists and can be read.
-if [ "$METRICS_FILE" = "" ] || ! [ -r $METRICS_FILE ]
-then
-  fail "Metrics file not found: $METRICS_FILE"
-fi
-
-# Reset the git notes and append the metrics file to the notes, then push and return the result.
-# This is favoured over a git notes merge as it avoids potential data loss/duplication from the merge strategy.
-function reset_append_note_push {
-  git fetch -f $GHC_ORIGIN refs/notes/perf:refs/notes/perf || true
-  echo "git notes --ref=perf append -F $METRICS_FILE HEAD"
-  git notes --ref=perf append -F $METRICS_FILE HEAD
-  git push $GHC_ORIGIN refs/notes/perf
-}
-
-# Push the metrics file as a git note. This may fail if another task pushes a note first. In that case
-# the latest note is fetched and appended.
-MAX_RETRY=20
-until reset_append_note_push || [ $MAX_RETRY -le 0 ]
-do
-  ((MAX_RETRY--))
-  echo ""
-  echo "Failed to push git notes. Fetching, appending, and retrying... $MAX_RETRY retries left."
-done


=====================================
.gitlab-ci.yml
=====================================
@@ -2,7 +2,7 @@ variables:
   GIT_SSL_NO_VERIFY: "1"
 
   # Commit of ghc/ci-images repository from which to pull Docker images
-  DOCKER_REV: 88e952f165f48cfb956ac9a2486a9263aa4f777c
+  DOCKER_REV: 40ffd37982ba04a35b772246a336bc097db4bc56
 
   # Sequential version number capturing the versions of all tools fetched by
   # .gitlab/win32-init.sh.
@@ -151,11 +151,10 @@ lint-release-changelogs:
 
 .validate-hadrian:
   <<: *only-default
-  allow_failure: true
   script:
     - cabal update
     - git clean -xdf && git submodule foreach git clean -xdf
-    - bash .circleci/prepare-system.sh
+    - .gitlab/prepare-system.sh
     - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
     - ./boot
     - ./configure $CONFIGURE_ARGS
@@ -206,7 +205,7 @@ hadrian-ghc-in-ghci:
     - cabal update
     - cd hadrian; cabal new-build --project-file=ci.project; cd ..
     - git clean -xdf && git submodule foreach git clean -xdf
-    - bash .circleci/prepare-system.sh
+    - .gitlab/prepare-system.sh
     - if [[ -d ./cabal-cache ]]; then cp -R ./.cabal-cache ~/.cabal-cache; fi
     - ./boot
     - ./configure $CONFIGURE_ARGS
@@ -354,7 +353,7 @@ validate-x86_64-darwin:
         echo "EXTRA_HADDOCK_OPTS += --hyperlinked-source --quickjump" >> mk/build.mk
       fi
 
-    - bash .circleci/prepare-system.sh
+    - .gitlab/prepare-system.sh
     # workaround for docker permissions
     - sudo chown ghc:ghc -R .
   after_script:
@@ -377,6 +376,8 @@ validate-x86_64-darwin:
   variables:
     TEST_ENV: "aarch64-linux-deb9"
     BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-aarch64-linux-deb9.tar.xz"
+    # Inexplicably makeindex fails
+    BUILD_SPHINX_PDF: "NO"
   cache:
     key: linux-aarch64-deb9
   tags:
@@ -398,6 +399,42 @@ nightly-aarch64-linux-deb9:
     variables:
       - $NIGHTLY
 
+#################################
+# armv7-linux-deb9
+#################################
+
+.build-armv7-linux-deb9:
+  extends: .validate-linux
+  stage: build
+  image: "registry.gitlab.haskell.org/ghc/ci-images/armv7-linux-deb9:$DOCKER_REV"
+  #allow_failure: true
+  variables:
+    TEST_ENV: "armv7-linux-deb9"
+    BIN_DIST_PREP_TAR_COMP: "bindistprep/ghc-armv7-linux-deb9.tar.xz"
+    CONFIGURE_ARGS: "--host=armv7a-unknown-linux-gnu --build=armv7a-unknown-linux-gnu --target=armv7a-unknown-linux-gnu"
+    # Inexplicably makeindex fails
+    BUILD_SPHINX_PDF: "NO"
+  cache:
+    key: linux-armv7-deb9
+  tags:
+    - armv7-linux
+
+validate-armv7-linux-deb9:
+  extends: .build-armv7-linux-deb9
+  artifacts:
+    when: always
+    expire_in: 2 week
+
+nightly-armv7-linux-deb9:
+  extends: .build-armv7-linux-deb9
+  artifacts:
+    expire_in: 2 year
+  variables:
+    TEST_TYPE: slowtest
+  only:
+    variables:
+      - $NIGHTLY
+
 #################################
 # i386-linux-deb9
 #################################
@@ -443,7 +480,8 @@ nightly-i386-linux-deb9:
   cache:
     key: linux-x86_64-deb9
 
-validate-x86_64-linux-deb9:
+# Disabled to reduce CI load
+.validate-x86_64-linux-deb9:
   extends: .build-x86_64-linux-deb9
   artifacts:
     when: always
@@ -467,14 +505,28 @@ validate-x86_64-linux-deb9-debug:
     BUILD_FLAVOUR: validate
     TEST_TYPE: slowtest
     TEST_ENV: "x86_64-linux-deb9-debug"
+  artifacts:
+    when: always
+    expire_in: 2 week
 
-validate-x86_64-linux-deb9-llvm:
+# Disabled to alleviate CI load
+.validate-x86_64-linux-deb9-llvm:
   extends: .build-x86_64-linux-deb9
   stage: full-build
   variables:
     BUILD_FLAVOUR: perf-llvm
     TEST_ENV: "x86_64-linux-deb9-llvm"
 
+nightly-x86_64-linux-deb9-llvm:
+  extends: .build-x86_64-linux-deb9
+  stage: full-build
+  variables:
+    BUILD_FLAVOUR: perf-llvm
+    TEST_ENV: "x86_64-linux-deb9-llvm"
+  only:
+    variables:
+      - $NIGHTLY
+
 validate-x86_64-linux-deb9-integer-simple:
   extends: .build-x86_64-linux-deb9
   stage: full-build
@@ -779,7 +831,7 @@ doc-tarball:
     - x86_64-linux
   image: ghcci/x86_64-linux-deb9:0.2
   dependencies:
-    - validate-x86_64-linux-deb9
+    - validate-x86_64-linux-deb9-debug
     - validate-x86_64-windows
   variables:
     LINUX_BINDIST: "ghc-x86_64-deb9-linux.tar.xz"


=====================================
.circleci/prepare-system.sh → .gitlab/prepare-system.sh
=====================================


=====================================
compiler/prelude/PrelRules.hs
=====================================
@@ -42,7 +42,7 @@ import TyCon       ( tyConDataCons_maybe, isAlgTyCon, isEnumerationTyCon
                    , isNewTyCon, unwrapNewTyCon_maybe, tyConDataCons
                    , tyConFamilySize )
 import DataCon     ( dataConTagZ, dataConTyCon, dataConWorkId )
-import CoreUtils   ( cheapEqExpr, exprIsHNF, exprType )
+import CoreUtils   ( cheapEqExpr, cheapEqExpr', exprIsHNF, exprType, stripTicksTop, stripTicksTopT, mkTicks )
 import CoreUnfold  ( exprIsConApp_maybe )
 import Type
 import OccName     ( occNameFS )
@@ -1367,20 +1367,27 @@ match_append_lit _ id_unf _
         [ Type ty1
         , lit1
         , c1
-        , Var unpk `App` Type ty2
-                   `App` lit2
-                   `App` c2
-                   `App` n
+        , e2
         ]
-  | unpk `hasKey` unpackCStringFoldrIdKey &&
-    c1 `cheapEqExpr` c2
+  -- N.B. Ensure that we strip off any ticks (e.g. source notes) from the
+  -- `lit` and `c` arguments, lest this may fail to fire when building with
+  -- -g3. See #16740.
+  | (strTicks, Var unpk `App` Type ty2
+                        `App` lit2
+                        `App` c2
+                        `App` n) <- stripTicksTop tickishFloatable e2
+  , unpk `hasKey` unpackCStringFoldrIdKey
+  , cheapEqExpr' tickishFloatable c1 c2
+  , (c1Ticks, c1') <- stripTicksTop tickishFloatable c1
+  , c2Ticks <- stripTicksTopT tickishFloatable c2
   , Just (LitString s1) <- exprIsLiteral_maybe id_unf lit1
   , Just (LitString s2) <- exprIsLiteral_maybe id_unf lit2
   = ASSERT( ty1 `eqType` ty2 )
-    Just (Var unpk `App` Type ty1
-                   `App` Lit (LitString (s1 `BS.append` s2))
-                   `App` c1
-                   `App` n)
+    Just $ mkTicks strTicks
+         $ Var unpk `App` Type ty1
+                    `App` Lit (LitString (s1 `BS.append` s2))
+                    `App` mkTicks (c1Ticks ++ c2Ticks) c1'
+                    `App` n
 
 match_append_lit _ _ _ _ = Nothing
 


=====================================
docs/users_guide/ffi-chap.rst
=====================================
@@ -87,7 +87,7 @@ Newtype wrapping of the IO monad
 The FFI spec requires the IO monad to appear in various places, but it
 can sometimes be convenient to wrap the IO monad in a ``newtype``, thus: ::
 
-      newtype MyIO a = MIO (IO a)
+       newtype MyIO a = MIO (IO a)
 
 (A reason for doing so might be to prevent the programmer from calling
 arbitrary IO procedures in some part of the program.)
@@ -112,15 +112,15 @@ The type variables in the type of a foreign declaration may be quantified with
 an explicit ``forall`` by using the :extension:`ExplicitForAll` language
 extension, as in the following example: ::
 
-    {-# LANGUAGE ExplicitForAll #-}
-    foreign import ccall "mmap" c_mmap :: forall a. CSize -> IO (Ptr a)
+       {-# LANGUAGE ExplicitForAll #-}
+       foreign import ccall "mmap" c_mmap :: forall a. CSize -> IO (Ptr a)
 
 Note that an explicit ``forall`` must appear at the front of the type signature
 and is not permitted to appear nested within the type, as in the following
 (erroneous) examples: ::
 
-    foreign import ccall "mmap" c_mmap' :: CSize -> forall a. IO (Ptr a)
-    foreign import ccall quux :: (forall a. Ptr a) -> IO ()
+       foreign import ccall "mmap" c_mmap' :: CSize -> forall a. IO (Ptr a)
+       foreign import ccall quux :: (forall a. Ptr a) -> IO ()
 
 .. _ffi-prim:
 
@@ -372,7 +372,7 @@ program. Here's the C code:
     #include <stdio.h>
     #include "HsFFI.h"
 
-    #ifdef __GLASGOW_HASKELL__
+    #if defined(__GLASGOW_HASKELL__)
     #include "Foo_stub.h"
     #endif
 
@@ -391,7 +391,7 @@ program. Here's the C code:
     }
 
 We've surrounded the GHC-specific bits with
-``#ifdef __GLASGOW_HASKELL__``; the rest of the code should be portable
+``#if defined(__GLASGOW_HASKELL__)``; the rest of the code should be portable
 across Haskell implementations that support the FFI standard.
 
 The call to ``hs_init()`` initializes GHC's runtime system. Do NOT try
@@ -435,7 +435,7 @@ GHC-specific API instead of ``hs_init()``:
     #include <stdio.h>
     #include "HsFFI.h"
 
-    #ifdef __GLASGOW_HASKELL__
+    #if defined(__GLASGOW_HASKELL__)
     #include "Foo_stub.h"
     #include "Rts.h"
     #endif


=====================================
docs/users_guide/ghci.rst
=====================================
@@ -2582,21 +2582,22 @@ commonly used commands.
     For example:
 
     .. code-block:: none
-      >:instances Maybe (Maybe Int)
-      instance Eq (Maybe (Maybe Int)) -- Defined in ‘GHC.Maybe’
-      instance Ord (Maybe (Maybe Int)) -- Defined in ‘GHC.Maybe’
-      instance Show (Maybe (Maybe Int)) -- Defined in ‘GHC.Show’
-      instance Read (Maybe (Maybe Int)) -- Defined in ‘GHC.Read’
-
-      >:set -XPartialTypeSignatures -fno-warn-partial-type-signatures
-
-      >:instances Maybe _
-      instance Eq _ => Eq (Maybe _) -- Defined in ‘GHC.Maybe’
-      instance Semigroup _ => Monoid (Maybe _) -- Defined in ‘GHC.Base’
-      instance Ord _ => Ord (Maybe _) -- Defined in ‘GHC.Maybe’
-      instance Semigroup _ => Semigroup (Maybe _) -- Defined in ‘GHC.Base’
-      instance Show _ => Show (Maybe _) -- Defined in ‘GHC.Show’
-      instance Read _ => Read (Maybe _) -- Defined in ‘GHC.Read’
+
+         > :instances Maybe (Maybe Int)
+         instance Eq (Maybe (Maybe Int)) -- Defined in ‘GHC.Maybe’
+         instance Ord (Maybe (Maybe Int)) -- Defined in ‘GHC.Maybe’
+         instance Show (Maybe (Maybe Int)) -- Defined in ‘GHC.Show’
+         instance Read (Maybe (Maybe Int)) -- Defined in ‘GHC.Read’
+
+         > :set -XPartialTypeSignatures -fno-warn-partial-type-signatures
+
+         > :instances Maybe _
+         instance Eq _ => Eq (Maybe _) -- Defined in ‘GHC.Maybe’
+         instance Semigroup _ => Monoid (Maybe _) -- Defined in ‘GHC.Base’
+         instance Ord _ => Ord (Maybe _) -- Defined in ‘GHC.Maybe’
+         instance Semigroup _ => Semigroup (Maybe _) -- Defined in ‘GHC.Base’
+         instance Show _ => Show (Maybe _) -- Defined in ‘GHC.Show’
+         instance Read _ => Read (Maybe _) -- Defined in ‘GHC.Read’
 
 .. ghci-cmd:: :main; ⟨arg1⟩ ... ⟨argn⟩
 


=====================================
hadrian/src/Hadrian/Utilities.hs
=====================================
@@ -16,7 +16,7 @@ module Hadrian.Utilities (
     BuildRoot (..), buildRoot, buildRootRules, isGeneratedSource,
 
     -- * File system operations
-    copyFile, copyFileUntracked, createFileLink, createFileLinkUntracked, fixFile,
+    copyFile, copyFileUntracked, createFileLink, fixFile,
     makeExecutable, moveFile, removeFile, createDirectory, copyDirectory,
     moveDirectory, removeDirectory,
 
@@ -290,17 +290,6 @@ infixl 1 <&>
 isGeneratedSource :: FilePath -> Action Bool
 isGeneratedSource file = buildRoot <&> (`isPrefixOf` file)
 
--- | Link a file (without tracking the link target). Create the target directory
--- if missing.
-createFileLinkUntracked :: FilePath -> FilePath -> Action ()
-createFileLinkUntracked linkTarget link = do
-    let dir = takeDirectory link
-    liftIO $ IO.createDirectoryIfMissing True dir
-    putProgressInfo =<< renderCreateFileLink linkTarget link
-    quietly . liftIO $ do
-        IO.removeFile link <|> return ()
-        IO.createFileLink linkTarget link
-
 -- | Link a file tracking the link target. Create the target directory if
 -- missing.
 createFileLink :: FilePath -> FilePath -> Action ()
@@ -309,7 +298,12 @@ createFileLink linkTarget link = do
                     then linkTarget
                     else takeDirectory link -/- linkTarget
     need [source]
-    createFileLinkUntracked linkTarget link
+    let dir = takeDirectory link
+    liftIO $ IO.createDirectoryIfMissing True dir
+    putProgressInfo =<< renderCreateFileLink linkTarget link
+    quietly . liftIO $ do
+        IO.removeFile link <|> return ()
+        IO.createFileLink linkTarget link
 
 -- | Copy a file tracking the source. Create the target directory if missing.
 copyFile :: FilePath -> FilePath -> Action ()


=====================================
hadrian/src/Rules/Library.hs
=====================================
@@ -11,7 +11,7 @@ import Expression hiding (way, package)
 import Oracles.ModuleFiles
 import Packages
 import Rules.Gmp
-import Rules.Rts (needRtsLibffiTargets)
+import Rules.Register
 import Target
 import Utilities
 
@@ -85,7 +85,7 @@ buildDynamicLibUnix root suffix dynlibpath = do
     dynlib <- parsePath (parseBuildLibDyn root suffix) "<dyn lib parser>" dynlibpath
     let context = libDynContext dynlib
     deps <- contextDependencies context
-    need =<< mapM pkgRegisteredLibraryFile deps
+    registerPackages deps
     objs <- libraryObjects context
     build $ target context (Ghc LinkHs $ Context.stage context) objs [dynlibpath]
 
@@ -144,28 +144,6 @@ libraryObjects context at Context{..} = do
     need $ noHsObjs ++ hsObjs
     return (noHsObjs ++ hsObjs)
 
--- | Return extra library targets.
-extraTargets :: Context -> Action [FilePath]
-extraTargets context
-    | package context == rts  = needRtsLibffiTargets (Context.stage context)
-    | otherwise               = return []
-
--- | Given a library 'Package' this action computes all of its targets. Needing
--- all the targets should build the library such that it is ready to be
--- registered into the package database.
--- See 'packageTargets' for the explanation of the @includeGhciLib@ parameter.
-libraryTargets :: Bool -> Context -> Action [FilePath]
-libraryTargets includeGhciLib context at Context {..} = do
-    libFile  <- pkgLibraryFile     context
-    ghciLib  <- pkgGhciLibraryFile context
-    ghci     <- if includeGhciLib && not (wayUnit Dynamic way)
-                then interpretInContext context $ getContextData buildGhciLib
-                else return False
-    extra    <- extraTargets context
-    return $ [ libFile ]
-          ++ [ ghciLib | ghci ]
-          ++ extra
-
 -- | Coarse-grain 'need': make sure all given libraries are fully built.
 needLibrary :: [Context] -> Action ()
 needLibrary cs = need =<< concatMapM (libraryTargets True) cs
@@ -270,4 +248,4 @@ parseLibDynFilename ext = do
 
 -- | Get the package identifier given the package name and version.
 pkgId :: String -> [Integer] -> String
-pkgId name version = name ++ "-" ++ intercalate "." (map show version)
\ No newline at end of file
+pkgId name version = name ++ "-" ++ intercalate "." (map show version)


=====================================
hadrian/src/Rules/Program.hs
=====================================
@@ -15,6 +15,7 @@ import Settings.Default
 import Target
 import Utilities
 import Rules.Library
+import Rules.Register
 
 -- | TODO: Drop code duplication
 buildProgramRules :: [(Resource, Int)] -> Rules ()
@@ -96,8 +97,7 @@ buildProgram bin ctx@(Context{..}) rs = do
   -- but when building the program, we link against the *ghc-pkg registered* library e.g.
   --    _build/stage1/lib/x86_64-linux-ghc-8.9.0.20190430/libHShaskeline-0.7.5.0-ghc8.9.0.20190430.so
   -- so we use pkgRegisteredLibraryFile instead.
-  need =<< mapM pkgRegisteredLibraryFile
-       =<< contextDependencies ctx
+  registerPackages =<< contextDependencies ctx
 
   cross <- flag CrossCompiling
   -- For cross compiler, copy @stage0/bin/<pgm>@ to @stage1/bin/@.


=====================================
hadrian/src/Rules/Register.hs
=====================================
@@ -1,7 +1,11 @@
-module Rules.Register (configurePackageRules, registerPackageRules) where
+module Rules.Register (
+    configurePackageRules, registerPackageRules, registerPackages,
+    libraryTargets
+    ) where
 
 import Base
 import Context
+import Expression ( getContextData )
 import Hadrian.BuildPath
 import Hadrian.Expression
 import Hadrian.Haskell.Cabal
@@ -12,7 +16,9 @@ import Rules.Rts
 import Settings
 import Target
 import Utilities
-import Rules.Library
+
+import Hadrian.Haskell.Cabal.Type
+import qualified Text.Parsec      as Parsec
 
 import Distribution.Version (Version)
 import qualified Distribution.Parsec as Cabal
@@ -21,7 +27,6 @@ import qualified Distribution.Types.PackageId as Cabal
 
 import qualified Hadrian.Haskell.Cabal.Parse as Cabal
 import qualified System.Directory            as IO
-import qualified Text.Parsec                 as Parsec
 
 -- * Configuring
 
@@ -63,6 +68,15 @@ parseToBuildSubdirectory root = do
 
 -- * Registering
 
+registerPackages :: [Context] -> Action ()
+registerPackages ctxs = do
+    need =<< mapM pkgRegisteredLibraryFile ctxs
+
+    -- | Dynamic RTS library files need symlinks (Rules.Rts.rtsRules).
+    forM_ ctxs $ \ ctx -> when (package ctx == rts) $ do
+        ways <- interpretInContext ctx (getLibraryWays <> getRtsWays)
+        needRtsSymLinks (stage ctx) ways
+
 -- | Register a package and initialise the corresponding package database if
 -- need be. Note that we only register packages in 'Stage0' and 'Stage1'.
 registerPackageRules :: [(Resource, Int)] -> Stage -> Rules ()
@@ -118,9 +132,6 @@ buildConf _ context at Context {..} conf = do
     Cabal.copyPackage context
     Cabal.registerPackage context
 
-    -- | Dynamic RTS library files need symlinks (Rules.Rts.rtsRules).
-    when (package == rts) (needRtsSymLinks stage ways)
-
     -- The above two steps produce an entry in the package database, with copies
     -- of many of the files we have build, e.g. Haskell interface files. We need
     -- to record this side effect so that Shake can cache these files too.
@@ -171,3 +182,25 @@ parseCabalName = fmap f . Cabal.eitherParsec
   where
     f :: Cabal.PackageId -> (String, Version)
     f pkg_id = (Cabal.unPackageName $ Cabal.pkgName pkg_id, Cabal.pkgVersion pkg_id)
+
+-- | Return extra library targets.
+extraTargets :: Context -> Action [FilePath]
+extraTargets context
+    | package context == rts  = needRtsLibffiTargets (Context.stage context)
+    | otherwise               = return []
+
+-- | Given a library 'Package' this action computes all of its targets. Needing
+-- all the targets should build the library such that it is ready to be
+-- registered into the package database.
+-- See 'packageTargets' for the explanation of the @includeGhciLib@ parameter.
+libraryTargets :: Bool -> Context -> Action [FilePath]
+libraryTargets includeGhciLib context at Context {..} = do
+    libFile  <- pkgLibraryFile     context
+    ghciLib  <- pkgGhciLibraryFile context
+    ghci     <- if includeGhciLib && not (wayUnit Dynamic way)
+                then interpretInContext context $ getContextData buildGhciLib
+                else return False
+    extra    <- extraTargets context
+    return $ [ libFile ]
+          ++ [ ghciLib | ghci ]
+          ++ extra


=====================================
hadrian/src/Rules/Rts.hs
=====================================
@@ -17,7 +17,7 @@ rtsRules = priority 3 $ do
       root -/- "//libHSrts_*-ghc*.dylib",
       root -/- "//libHSrts-ghc*.so",
       root -/- "//libHSrts-ghc*.dylib"]
-      |%> \ rtsLibFilePath' -> createFileLinkUntracked
+      |%> \ rtsLibFilePath' -> createFileLink
             (addRtsDummyVersion $ takeFileName rtsLibFilePath')
             rtsLibFilePath'
 
@@ -175,4 +175,4 @@ replaceLibFilePrefix oldPrefix newPrefix oldFilePath = let
         (error $ "Expected RTS library file to start with " ++ oldPrefix)
         (newPrefix ++)
         (stripPrefix oldPrefix oldFileName)
-    in replaceFileName oldFilePath newFileName
\ No newline at end of file
+    in replaceFileName oldFilePath newFileName


=====================================
libraries/base/tests/all.T
=====================================
@@ -94,13 +94,27 @@ test('dynamic004',      omit_ways(['normal', 'threaded1', 'ghci']), compile_and_
 test('dynamic005',      normal, compile_and_run, [''])
 
 enum_setups = [when(fast(), skip)]
-test('enum01',          [extra_files(['enum_processor.bat', 'enum_processor.py']),
-                         enum_setups], compile_and_run, [''])
-test('enum02',          [extra_files(['enum_processor.bat', 'enum_processor.py']),
-                         enum_setups], compile_and_run, [''])
-test('enum03',          [extra_files(['enum_processor.bat', 'enum_processor.py']),
-                         enum_setups], compile_and_run, [''])
-test('enum04',          normal, compile_and_run, [''])
+def enum_test(name):
+    """
+    These tests have a funky Python preprocessor which require some headstands
+    to run on Windows.
+    """
+    if opsys('mingw32'):
+        test(name,
+             [when(opsys('mingw32'), extra_files(['enum_processor.bat'])),
+              extra_files(['enum_processor.py'])],
+             compile_and_run,
+             ['-F -pgmF ./enum_processor.bat'])
+    else:
+        test(name,
+             [extra_files(['enum_processor.py'])],
+             compile_and_run,
+             ['-F -pgmF ./enum_processor.py'])
+
+enum_test('enum01')
+enum_test('enum02')
+enum_test('enum03')
+test('enum04', normal, compile_and_run, [''])
 
 test('exceptionsrun001',        normal, compile_and_run, [''])
 test('exceptionsrun002', 	normal, compile_and_run, [''])


=====================================
libraries/base/tests/enum01.hs
=====================================
@@ -1,8 +1,4 @@
 -- !!! Testing the Prelude's Enum instances.
-{-# OPTIONS_GHC -F -pgmF ./enum_processor.bat #-}
--- The processor is a non-CPP-based equivalent of
--- #define printTest(x) (do{ putStr ( "    " ++ "x" ++ " = " ) ; print (x) })
--- which is not portable to clang
 
 module Main(main) where
 


=====================================
libraries/base/tests/enum02.hs
=====================================
@@ -1,8 +1,4 @@
 -- !!! Testing the Int Enum instances.
-{-# OPTIONS_GHC -F -pgmF ./enum_processor.bat #-}
--- The processor is a non-CPP-based equivalent of
--- #define printTest(x) (do{ putStr ( "    " ++ "x" ++ " = " ) ; print (x) })
--- which is not portable to clang
 
 module Main(main) where
 


=====================================
libraries/base/tests/enum03.hs
=====================================
@@ -1,8 +1,4 @@
 -- !!! Testing the Word Enum instances.
-{-# OPTIONS_GHC -F -pgmF ./enum_processor.bat #-}
--- The processor is a non-CPP-based equivalent of
--- #define printTest(x) (do{ putStr ( "    " ++ "x" ++ " = " ) ; print (x) })
--- which is not portable to clang
 
 module Main(main) where
 


=====================================
libraries/base/tests/enum_processor.bat
=====================================
@@ -1,11 +1,5 @@
 :;# Problem: GHC on Windows doesn't like '-pgmF ./enum_processor.py'.
 :;#          See ticket:365#comment:7 for details.
 :;#
-:;# Workaround: this file, which functions both as a Windows .bat script and a
-:;# Unix shell script. Hacky, but it seems to work.
 
-:;# Starts with a ':', to skip on Windows.
-:; "${PYTHON}" enum_processor.py $@; exit $?
-
-:;# Windows only:
 %PYTHON% enum_processor.py %*


=====================================
libraries/base/tests/enum_processor.py
=====================================
@@ -1,3 +1,5 @@
+#!/usr/bin/env python3
+
 # The rough equivalent of the traditional CPP:
 #   #define printTest(x) (do{ putStr ( "    " ++ "x" ++ " = " ) ; print (x) })
 # which is not portable to clang.


=====================================
llvm-targets
=====================================
@@ -6,8 +6,9 @@
 ,("armv6l-unknown-linux-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "arm1176jzf-s", "+strict-align"))
 ,("armv7-unknown-linux-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("armv7a-unknown-linux-gnueabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
-,("armv7l-unknown-linux-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
+,("armv7a-unknown-linux-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("armv7l-unknown-linux-gnueabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
+,("armv7l-unknown-linux-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("aarch64-unknown-linux-gnu", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
 ,("aarch64-unknown-linux", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
 ,("i386-unknown-linux-gnu", ("e-m:e-p:32:32-f64:32:64-f80:32-n8:16:32-S128", "pentium4", ""))
@@ -17,17 +18,18 @@
 ,("x86_64-unknown-linux-android", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", "+sse4.2 +popcnt"))
 ,("armv7-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("aarch64-unknown-linux-android", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
+,("armv7a-unknown-linux-androideabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", ""))
 ,("powerpc64le-unknown-linux", ("e-m:e-i64:64-n32:64", "ppc64le", ""))
-,("amd64-portbld-freebsd", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", ""))
-,("x86_64-unknown-freebsd", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", ""))
-,("arm-unknown-nto-qnx-eabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "arm7tdmi", "+strict-align"))
 ,("i386-apple-darwin", ("e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128", "yonah", ""))
 ,("x86_64-apple-darwin", ("e-m:o-i64:64-f80:128-n8:16:32:64-S128", "core2", ""))
 ,("armv7-apple-ios", ("e-m:o-p:32:32-f64:32:64-v64:32:64-v128:32:128-a:0:32-n32-S32", "generic", ""))
 ,("aarch64-apple-ios", ("e-m:o-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
 ,("i386-apple-ios", ("e-m:o-p:32:32-f64:32:64-f80:128-n8:16:32-S128", "yonah", ""))
 ,("x86_64-apple-ios", ("e-m:o-i64:64-f80:128-n8:16:32:64-S128", "core2", ""))
+,("amd64-portbld-freebsd", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", ""))
+,("x86_64-unknown-freebsd", ("e-m:e-i64:64-f80:128-n8:16:32:64-S128", "x86-64", ""))
 ,("aarch64-unknown-freebsd", ("e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128", "generic", "+neon"))
 ,("armv6-unknown-freebsd-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "arm1176jzf-s", "+strict-align"))
 ,("armv7-unknown-freebsd-gnueabihf", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "generic", "+strict-align"))
+,("arm-unknown-nto-qnx-eabi", ("e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64", "arm7tdmi", "+strict-align"))
 ]


=====================================
rts/CheckUnload.c
=====================================
@@ -404,6 +404,7 @@ void checkUnload (StgClosure *static_objects)
       p = UNTAG_STATIC_LIST_PTR(p);
       checkAddress(addrs, p, s_indices);
       info = get_itbl(p);
+      checkAddress(addrs, info, s_indices);
       link = *STATIC_LINK(info, p);
   }
 


=====================================
rts/Linker.c
=====================================
@@ -1185,11 +1185,17 @@ void freeObjectCode (ObjectCode *oc)
                            oc->sections[i].mapped_size);
                     break;
                 case SECTION_M32:
+                    IF_DEBUG(sanity,
+                        memset(oc->sections[i].start,
+                            0x00, oc->sections[i].size));
                     m32_free(oc->sections[i].start,
                              oc->sections[i].size);
                     break;
 #endif
                 case SECTION_MALLOC:
+                    IF_DEBUG(sanity,
+                        memset(oc->sections[i].start,
+                            0x00, oc->sections[i].size));
                     stgFree(oc->sections[i].start);
                     break;
                 default:


=====================================
rts/linker/M32Alloc.c
=====================================
@@ -24,7 +24,7 @@ Note [Compile Time Trickery]
 This file implements two versions of each of the `m32_*` functions. At the top
 of the file there is the real implementation (compiled in when
 `RTS_LINKER_USE_MMAP` is true) and a dummy implementation that exists only to
-satisfy the compiler and which hould never be called. If any of these dummy
+satisfy the compiler and which should never be called. If any of these dummy
 implementations are called the program will abort.
 
 The rationale for this is to allow the calling code to be written without using


=====================================
testsuite/tests/ghci/T16525a/A.hs
=====================================
@@ -0,0 +1,12 @@
+module A where
+
+import B
+
+myIntVal :: Int
+myIntVal = sum [1,2,3,4]
+
+value :: [Value]
+value = [Value "a;lskdfa;lszkfsd;alkfjas" myIntVal]
+
+v1 :: Value -> String
+v1 (Value a _) = a


=====================================
testsuite/tests/ghci/T16525a/B.hs
=====================================
@@ -0,0 +1,3 @@
+module B where
+
+data Value = Value String Int


=====================================
testsuite/tests/ghci/T16525a/T16525a.script
=====================================
@@ -0,0 +1,6 @@
+:set -fobject-code
+:load A
+import Control.Concurrent
+_ <- forkIO $ threadDelay 1000000 >> (print (map v1 value))
+:l []
+System.Mem.performGC


=====================================
testsuite/tests/ghci/T16525a/T16525a.stdout
=====================================


=====================================
testsuite/tests/ghci/T16525a/all.T
=====================================
@@ -0,0 +1,5 @@
+test('T16525a',
+     [extra_files(['A.hs', 'B.hs', ]),
+      extra_run_opts('+RTS -DS -RTS'),
+      when(ghc_dynamic(), skip), ],
+     ghci_script, ['T16525a.script'])


=====================================
utils/llvm-targets/gen-data-layout.sh
=====================================
@@ -18,35 +18,73 @@
 
 # Target sets for which to generate the llvm-targets file
 TARGETS=(
+    #########################
+    # Windows
+    #########################
+
     # Windows x86
-    "i386-unknown-windows" "i686-unknown-windows" "x86_64-unknown-windows"
+    "i386-unknown-windows"
+    "i686-unknown-windows"
+    "x86_64-unknown-windows"
+
+    #########################
+    # Linux
+    #########################
 
     # Linux ARM
-    "arm-unknown-linux-gnueabihf" "armv6-unknown-linux-gnueabihf" "armv6l-unknown-linux-gnueabihf"
-    "armv7-unknown-linux-gnueabihf" "armv7a-unknown-linux-gnueabi" "armv7l-unknown-linux-gnueabihf"
+    "arm-unknown-linux-gnueabihf"
+    "armv6-unknown-linux-gnueabihf"
+    "armv6l-unknown-linux-gnueabihf"
+    "armv7-unknown-linux-gnueabihf"
+    "armv7a-unknown-linux-gnueabi"
+    "armv7a-unknown-linux-gnueabihf"
     "armv7l-unknown-linux-gnueabi"
-    "aarch64-unknown-linux-gnu" "aarch64-unknown-linux"
+    "armv7l-unknown-linux-gnueabihf"
+    "aarch64-unknown-linux-gnu"
+    "aarch64-unknown-linux"
     # Linux x86
-    "i386-unknown-linux-gnu" "i386-unknown-linux" "x86_64-unknown-linux-gnu" "x86_64-unknown-linux"
+    "i386-unknown-linux-gnu"
+    "i386-unknown-linux"
+    "x86_64-unknown-linux-gnu"
+    "x86_64-unknown-linux"
     # Linux Android
-    "x86_64-unknown-linux-android" "armv7-unknown-linux-androideabi" "aarch64-unknown-linux-android"
+    "x86_64-unknown-linux-android"
+    "armv7-unknown-linux-androideabi"
+    "aarch64-unknown-linux-android"
+    "armv7a-unknown-linux-androideabi"
     # Linux ppc64le
     "powerpc64le-unknown-linux"
 
+    #########################
+    # Darwin
+    #########################
+
+    # macOS
+    "i386-apple-darwin"
+    "x86_64-apple-darwin"
+    # iOS
+    "armv7-apple-ios arm64-apple-ios"
+    "i386-apple-ios x86_64-apple-ios"
+
+    #########################
+    # FreeBSD
+    #########################
+
     # FreeBSD amd64
     "amd64-portbld-freebsd"
     "x86_64-unknown-freebsd" # See #15718
 
-    # QNX
-    "arm-unknown-nto-qnx-eabi"
+    # FreeBSD ARM
+    "aarch64-unknown-freebsd"
+    "armv6-unknown-freebsd-gnueabihf"
+    "armv7-unknown-freebsd-gnueabihf"
 
-    # macOS
-    "i386-apple-darwin" "x86_64-apple-darwin"
-    # iOS
-    "armv7-apple-ios arm64-apple-ios" "i386-apple-ios x86_64-apple-ios"
+    #########################
+    # Other
+    #########################
 
-    # FreeBSD ARM
-    "aarch64-unknown-freebsd" "armv6-unknown-freebsd-gnueabihf" "armv7-unknown-freebsd-gnueabihf"
+    # QNX
+    "arm-unknown-nto-qnx-eabi"
 )
 
 # given the call to clang -c11 that clang --target -v generates,



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/83ca452a35eed1bcfe7344f2874de72ca459c746...bc143e5937013db56cedf73cf211df76b67c4ae5

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/83ca452a35eed1bcfe7344f2874de72ca459c746...bc143e5937013db56cedf73cf211df76b67c4ae5
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/20190613/b679dab1/attachment-0001.html>


More information about the ghc-commits mailing list