[Git][ghc/ghc][wip/marge_bot_batch_merge_job] 9 commits: gitlab-ci: Bump Docker image

Marge Bot gitlab at gitlab.haskell.org
Wed Jun 12 21:58:14 UTC 2019



 Marge Bot pushed to branch wip/marge_bot_batch_merge_job at Glasgow Haskell Compiler / GHC


Commits:
7b751ed8 by Ben Gamari at 2019-06-12T21:52:35Z
gitlab-ci: Bump Docker image

Fixes linters.

- - - - -
e52e2d13 by Ben Gamari at 2019-06-12T21:57:56Z
Add a few missing llvm-targets

This should finally fix #14261.

[skip ci]

- - - - -
a49f4a30 by Phuong Trinh at 2019-06-12T21:57:59Z
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.

- - - - -
746b279d by Ben Gamari at 2019-06-12T21:58:00Z
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.

- - - - -
f3d413ee by David Eichmann at 2019-06-12T21:58:00Z
Hadrian: Track RTS library symlink targets

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

- - - - -
92d35db4 by Alp Mestanogullari at 2019-06-12T21:58:02Z
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.

- - - - -
a78db80e by Ben Gamari at 2019-06-12T21:58:03Z
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.

- - - - -
d275c6d5 by Ben Gamari at 2019-06-12T21:58:03Z
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.

- - - - -
e3c6bfba by Ben Gamari at 2019-06-12T21:58:03Z
Clean up .circleci

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

- - - - -


23 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
- 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: ac65f31dcffb09cd7ca7aaa70f447fcbb19f427f
+  DOCKER_REV: 88e952f165f48cfb956ac9a2486a9263aa4f777c
 
   # 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:


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


=====================================
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/ea3487cb124a8aca036e63017e67f6594ba1070f...e3c6bfba0d618f8f875ee9d7d07d34cf2dd1f95b

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/compare/ea3487cb124a8aca036e63017e67f6594ba1070f...e3c6bfba0d618f8f875ee9d7d07d34cf2dd1f95b
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/20190612/5a8abe83/attachment-0001.html>


More information about the ghc-commits mailing list