Cheng Shao pushed to branch wip/ubsan at Glasgow Haskell Compiler / GHC

Commits:

14 changed files:

Changes:

  • .gitlab-ci.yml
    ... ... @@ -11,7 +11,7 @@ variables:
    11 11
       GIT_SSL_NO_VERIFY: "1"
    
    12 12
     
    
    13 13
       # Commit of ghc/ci-images repository from which to pull Docker images
    
    14
    -  DOCKER_REV: a97d5c67d803c6b3811c6cccdf33dc8e9d7eafe3
    
    14
    +  DOCKER_REV: 71454506c0c2e215953306b04572092cb89a6c2a
    
    15 15
     
    
    16 16
       # Sequential version number of all cached things.
    
    17 17
       # Bump to invalidate GitLab CI cache.
    
    ... ... @@ -444,14 +444,14 @@ hadrian-ghc-in-ghci:
    444 444
     hadrian-multi:
    
    445 445
       stage: testing
    
    446 446
       needs:
    
    447
    -    - job: x86_64-linux-fedora42-release
    
    447
    +    - job: x86_64-linux-fedora43-release
    
    448 448
           optional: true
    
    449
    -    - job: nightly-x86_64-linux-fedora42-release
    
    449
    +    - job: nightly-x86_64-linux-fedora43-release
    
    450 450
           optional: true
    
    451
    -    - job: release-x86_64-linux-fedora42-release
    
    451
    +    - job: release-x86_64-linux-fedora43-release
    
    452 452
           optional: true
    
    453 453
       dependencies: null
    
    454
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV"
    
    454
    +  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    455 455
       before_script:
    
    456 456
         # workaround for docker permissions
    
    457 457
         - sudo chown ghc:ghc -R .
    
    ... ... @@ -471,7 +471,7 @@ hadrian-multi:
    471 471
         - ls
    
    472 472
         - |
    
    473 473
           mkdir tmp
    
    474
    -      tar -xf ghc-x86_64-linux-fedora42-release.tar.xz -C tmp
    
    474
    +      tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C tmp
    
    475 475
           pushd tmp/ghc-*/
    
    476 476
           ./configure --prefix=$root
    
    477 477
           make install
    
    ... ... @@ -533,17 +533,17 @@ test-cabal-reinstall-x86_64-linux-deb10:
    533 533
     abi-test-nightly:
    
    534 534
       stage: full-build
    
    535 535
       needs:
    
    536
    -    - job: nightly-x86_64-linux-fedora42-release-hackage
    
    537
    -    - job: nightly-x86_64-linux-fedora42-release
    
    536
    +    - job: nightly-x86_64-linux-fedora43-release-hackage
    
    537
    +    - job: nightly-x86_64-linux-fedora43-release
    
    538 538
       tags:
    
    539 539
         - x86_64-linux
    
    540
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV"
    
    540
    +  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    541 541
       dependencies: null
    
    542 542
       before_script:
    
    543 543
         - mkdir -p normal
    
    544 544
         - mkdir -p hackage
    
    545
    -    - tar -xf ghc-x86_64-linux-fedora42-release.tar.xz -C normal/
    
    546
    -    - tar -xf ghc-x86_64-linux-fedora42-release-hackage_docs.tar.xz -C hackage/
    
    545
    +    - tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C normal/
    
    546
    +    - tar -xf ghc-x86_64-linux-fedora43-release-hackage_docs.tar.xz -C hackage/
    
    547 547
       script:
    
    548 548
         - .gitlab/ci.sh compare_interfaces_of "normal/ghc-*" "hackage/ghc-*"
    
    549 549
       artifacts:
    
    ... ... @@ -620,9 +620,9 @@ doc-tarball:
    620 620
     hackage-doc-tarball:
    
    621 621
       stage: packaging
    
    622 622
       needs:
    
    623
    -    - job: nightly-x86_64-linux-fedora42-release-hackage
    
    623
    +    - job: nightly-x86_64-linux-fedora43-release-hackage
    
    624 624
           optional: true
    
    625
    -    - job: release-x86_64-linux-fedora42-release-hackage
    
    625
    +    - job: release-x86_64-linux-fedora43-release-hackage
    
    626 626
           optional: true
    
    627 627
         - job: source-tarball
    
    628 628
       tags:
    
    ... ... @@ -639,7 +639,7 @@ hackage-doc-tarball:
    639 639
           - hackage_docs
    
    640 640
       before_script:
    
    641 641
         - tar -xf ghc-*[0-9]-src.tar.xz
    
    642
    -    - tar -xf ghc-x86_64-linux-fedora42-release.tar.xz -C ghc*/
    
    642
    +    - tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C ghc*/
    
    643 643
       script:
    
    644 644
         - cd ghc*/
    
    645 645
         - mv .gitlab/rel_eng/upload_ghc_libs.py .
    
    ... ... @@ -765,7 +765,7 @@ test-bootstrap:
    765 765
     # Triggering jobs in the ghc/head.hackage project requires that we have a job
    
    766 766
     # token for that repository. Furthermore the head.hackage CI job must have
    
    767 767
     # access to an unprivileged access token with the ability to query the ghc/ghc
    
    768
    -# project such that it can find the job ID of the fedora42 job for the current
    
    768
    +# project such that it can find the job ID of the fedora43 job for the current
    
    769 769
     # pipeline.
    
    770 770
     #
    
    771 771
     # hackage-lint: Can be triggered on any MR, normal validate pipeline or nightly build.
    
    ... ... @@ -852,7 +852,7 @@ nightly-hackage-lint:
    852 852
     
    
    853 853
     nightly-hackage-perf:
    
    854 854
       needs:
    
    855
    -    - job: nightly-x86_64-linux-fedora42-release
    
    855
    +    - job: nightly-x86_64-linux-fedora43-release
    
    856 856
           optional: true
    
    857 857
           artifacts: false
    
    858 858
         - job: nightly-aarch64-linux-deb12-validate
    
    ... ... @@ -871,7 +871,7 @@ nightly-hackage-perf:
    871 871
     
    
    872 872
     release-hackage-lint:
    
    873 873
       needs:
    
    874
    -    - job: release-x86_64-linux-fedora42-release
    
    874
    +    - job: release-x86_64-linux-fedora43-release
    
    875 875
           optional: true
    
    876 876
           artifacts: false
    
    877 877
         - job: release-aarch64-linux-deb12-release+no_split_sections
    
    ... ... @@ -957,13 +957,13 @@ perf-nofib:
    957 957
       allow_failure: true
    
    958 958
       stage: testing
    
    959 959
       needs:
    
    960
    -    - job: x86_64-linux-fedora42-release
    
    960
    +    - job: x86_64-linux-fedora43-release
    
    961 961
           optional: true
    
    962
    -    - job: nightly-x86_64-linux-fedora42-release
    
    962
    +    - job: nightly-x86_64-linux-fedora43-release
    
    963 963
           optional: true
    
    964
    -    - job: release-x86_64-linux-fedora42-release
    
    964
    +    - job: release-x86_64-linux-fedora43-release
    
    965 965
           optional: true
    
    966
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV"
    
    966
    +  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    967 967
       rules:
    
    968 968
         - when: never
    
    969 969
         - *full-ci
    
    ... ... @@ -976,7 +976,7 @@ perf-nofib:
    976 976
         - root=$(pwd)/ghc
    
    977 977
         - |
    
    978 978
           mkdir tmp
    
    979
    -      tar -xf ../ghc-x86_64-linux-fedora42-release.tar.xz -C tmp
    
    979
    +      tar -xf ../ghc-x86_64-linux-fedora43-release.tar.xz -C tmp
    
    980 980
           pushd tmp/ghc-*/
    
    981 981
           ./configure --prefix=$root
    
    982 982
           make install
    
    ... ... @@ -1000,14 +1000,14 @@ perf-nofib:
    1000 1000
     perf:
    
    1001 1001
       stage: testing
    
    1002 1002
       needs:
    
    1003
    -    - job: x86_64-linux-fedora42-release
    
    1003
    +    - job: x86_64-linux-fedora43-release
    
    1004 1004
           optional: true
    
    1005
    -    - job: nightly-x86_64-linux-fedora42-release
    
    1005
    +    - job: nightly-x86_64-linux-fedora43-release
    
    1006 1006
           optional: true
    
    1007
    -    - job: release-x86_64-linux-fedora42-release
    
    1007
    +    - job: release-x86_64-linux-fedora43-release
    
    1008 1008
           optional: true
    
    1009 1009
       dependencies: null
    
    1010
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV"
    
    1010
    +  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    1011 1011
       tags:
    
    1012 1012
         - x86_64-linux-perf
    
    1013 1013
       before_script:
    
    ... ... @@ -1017,7 +1017,7 @@ perf:
    1017 1017
         - root=$(pwd)/ghc
    
    1018 1018
         - |
    
    1019 1019
           mkdir tmp
    
    1020
    -      tar -xf ghc-x86_64-linux-fedora42-release.tar.xz -C tmp
    
    1020
    +      tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C tmp
    
    1021 1021
           pushd tmp/ghc-*/
    
    1022 1022
           ./configure --prefix=$root
    
    1023 1023
           make install
    
    ... ... @@ -1041,14 +1041,14 @@ perf:
    1041 1041
     abi-test:
    
    1042 1042
       stage: testing
    
    1043 1043
       needs:
    
    1044
    -    - job: x86_64-linux-fedora42-release
    
    1044
    +    - job: x86_64-linux-fedora43-release
    
    1045 1045
           optional: true
    
    1046
    -    - job: nightly-x86_64-linux-fedora42-release
    
    1046
    +    - job: nightly-x86_64-linux-fedora43-release
    
    1047 1047
           optional: true
    
    1048
    -    - job: release-x86_64-linux-fedora42-release
    
    1048
    +    - job: release-x86_64-linux-fedora43-release
    
    1049 1049
           optional: true
    
    1050 1050
       dependencies: null
    
    1051
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV"
    
    1051
    +  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    1052 1052
       rules:
    
    1053 1053
         - if: $CI_MERGE_REQUEST_ID
    
    1054 1054
         - if: '$CI_COMMIT_BRANCH == "master"'
    
    ... ... @@ -1059,7 +1059,7 @@ abi-test:
    1059 1059
         - root=$(pwd)/ghc
    
    1060 1060
         - |
    
    1061 1061
           mkdir tmp
    
    1062
    -      tar -xf ghc-x86_64-linux-fedora42-release.tar.xz -C tmp
    
    1062
    +      tar -xf ghc-x86_64-linux-fedora43-release.tar.xz -C tmp
    
    1063 1063
           pushd tmp/ghc-*/
    
    1064 1064
           ./configure --prefix=$root
    
    1065 1065
           make install
    
    ... ... @@ -1094,29 +1094,29 @@ abi-test:
    1094 1094
     ghc-wasm-meta-gmp:
    
    1095 1095
       extends: .ghc-wasm-meta
    
    1096 1096
       needs:
    
    1097
    -    - job: x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1097
    +    - job: x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1098 1098
           artifacts: false
    
    1099 1099
       variables:
    
    1100 1100
         UPSTREAM_GHC_FLAVOUR: gmp
    
    1101
    -    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1101
    +    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1102 1102
     
    
    1103 1103
     ghc-wasm-meta-native:
    
    1104 1104
       extends: .ghc-wasm-meta
    
    1105 1105
       needs:
    
    1106
    -    - job: x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1106
    +    - job: x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1107 1107
           artifacts: false
    
    1108 1108
       variables:
    
    1109 1109
         UPSTREAM_GHC_FLAVOUR: native
    
    1110
    -    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1110
    +    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1111 1111
     
    
    1112 1112
     ghc-wasm-meta-unreg:
    
    1113 1113
       extends: .ghc-wasm-meta
    
    1114 1114
       needs:
    
    1115
    -    - job: x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1115
    +    - job: x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1116 1116
           artifacts: false
    
    1117 1117
       variables:
    
    1118 1118
         UPSTREAM_GHC_FLAVOUR: unreg
    
    1119
    -    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1119
    +    UPSTREAM_GHC_JOB_NAME: x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf
    
    1120 1120
     
    
    1121 1121
     ############################################################
    
    1122 1122
     # Documentation deployment via GitLab Pages
    
    ... ... @@ -1218,7 +1218,7 @@ ghcup-metadata-nightly:
    1218 1218
       extends: .ghcup-metadata
    
    1219 1219
       # Explicit needs for validate pipeline because we only need certain bindists
    
    1220 1220
       needs:
    
    1221
    -    - job: nightly-x86_64-linux-fedora42-release
    
    1221
    +    - job: nightly-x86_64-linux-fedora43-release
    
    1222 1222
           artifacts: false
    
    1223 1223
         - job: nightly-x86_64-linux-ubuntu24_04-validate
    
    1224 1224
           artifacts: false
    
    ... ... @@ -1236,7 +1236,7 @@ ghcup-metadata-nightly:
    1236 1236
           artifacts: false
    
    1237 1237
         - job: nightly-x86_64-windows-validate
    
    1238 1238
           artifacts: false
    
    1239
    -    - job: nightly-x86_64-linux-alpine3_22-validate
    
    1239
    +    - job: nightly-x86_64-linux-alpine3_23-validate
    
    1240 1240
           artifacts: false
    
    1241 1241
         - job: nightly-x86_64-linux-deb9-validate
    
    1242 1242
           artifacts: false
    
    ... ... @@ -1244,7 +1244,7 @@ ghcup-metadata-nightly:
    1244 1244
           artifacts: false
    
    1245 1245
         - job: nightly-i386-linux-deb12-validate
    
    1246 1246
           artifacts: false
    
    1247
    -    - job: nightly-i386-linux-alpine3_22-validate
    
    1247
    +    - job: nightly-i386-linux-alpine3_23-validate
    
    1248 1248
           artifacts: false
    
    1249 1249
         - job: nightly-x86_64-linux-deb10-validate
    
    1250 1250
           artifacts: false
    
    ... ... @@ -1256,7 +1256,7 @@ ghcup-metadata-nightly:
    1256 1256
           artifacts: false
    
    1257 1257
         - job: nightly-aarch64-linux-deb12-validate
    
    1258 1258
           artifacts: false
    
    1259
    -    - job: nightly-aarch64-linux-alpine3_22-validate
    
    1259
    +    - job: nightly-aarch64-linux-alpine3_23-validate
    
    1260 1260
           artifacts: false
    
    1261 1261
         - job: source-tarball
    
    1262 1262
           artifacts: false
    
    ... ... @@ -1269,7 +1269,7 @@ ghcup-metadata-nightly:
    1269 1269
     # Update the ghcup metadata with information about this nightly pipeline
    
    1270 1270
     ghcup-metadata-nightly-push:
    
    1271 1271
       stage: deploy
    
    1272
    -  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV"
    
    1272
    +  image: "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV"
    
    1273 1273
       dependencies: null
    
    1274 1274
       tags:
    
    1275 1275
         - x86_64-linux
    

  • .gitlab/generate-ci/gen_ci.hs
    ... ... @@ -82,7 +82,7 @@ The generated names for the jobs is important as there are a few downstream cons
    82 82
     of the jobs artifacts. Therefore some care should be taken if changing the generated
    
    83 83
     names of jobs to update these other places.
    
    84 84
     
    
    85
    -1. fedora42 jobs are required by head.hackage
    
    85
    +1. fedora43 jobs are required by head.hackage
    
    86 86
     2. The fetch-gitlab release utility pulls release artifacts from the
    
    87 87
     3. The ghc-head-from script downloads release artifacts based on a pipeline change.
    
    88 88
     4. Some subsequent CI jobs have explicit dependencies (for example docs-tarball, perf, perf-nofib)
    
    ... ... @@ -118,14 +118,14 @@ data LinuxDistro
    118 118
       | Debian11Js
    
    119 119
       | Debian10
    
    120 120
       | Debian9
    
    121
    -  | Fedora42
    
    121
    +  | Fedora43
    
    122 122
       | Ubuntu2404LoongArch64
    
    123 123
       | Ubuntu2404
    
    124 124
       | Ubuntu2204
    
    125 125
       | Ubuntu2004
    
    126 126
       | Ubuntu1804
    
    127 127
       | Alpine312
    
    128
    -  | Alpine322
    
    128
    +  | Alpine323
    
    129 129
       | AlpineWasm
    
    130 130
       | Rocky8
    
    131 131
       deriving (Eq)
    
    ... ... @@ -161,6 +161,7 @@ data BuildConfig
    161 161
                     , hostFullyStatic :: Bool
    
    162 162
                     , tablesNextToCode :: Bool
    
    163 163
                     , threadSanitiser :: Bool
    
    164
    +                , ubsan :: Bool
    
    164 165
                     , noSplitSections :: Bool
    
    165 166
                     , validateNonmovingGc :: Bool
    
    166 167
                     , textWithSIMDUTF :: Bool
    
    ... ... @@ -186,6 +187,7 @@ mkJobFlavour BuildConfig{..} = Flavour buildFlavour opts
    186 187
                [FullyStatic | fullyStatic] ++
    
    187 188
                [HostFullyStatic | hostFullyStatic] ++
    
    188 189
                [ThreadSanitiser | threadSanitiser] ++
    
    190
    +           [UBSan | ubsan] ++
    
    189 191
                [NoSplitSections | noSplitSections, buildFlavour == Release ] ++
    
    190 192
                [BootNonmovingGc | validateNonmovingGc ] ++
    
    191 193
                [TextWithSIMDUTF | textWithSIMDUTF]
    
    ... ... @@ -198,6 +200,7 @@ data FlavourTrans =
    198 200
         | FullyStatic
    
    199 201
         | HostFullyStatic
    
    200 202
         | ThreadSanitiser
    
    203
    +    | UBSan
    
    201 204
         | NoSplitSections
    
    202 205
         | BootNonmovingGc
    
    203 206
         | TextWithSIMDUTF
    
    ... ... @@ -226,6 +229,7 @@ vanilla = BuildConfig
    226 229
       , hostFullyStatic = False
    
    227 230
       , tablesNextToCode = True
    
    228 231
       , threadSanitiser = False
    
    232
    +  , ubsan = False
    
    229 233
       , noSplitSections = False
    
    230 234
       , validateNonmovingGc = False
    
    231 235
       , textWithSIMDUTF = False
    
    ... ... @@ -279,6 +283,9 @@ llvm = vanilla { llvmBootstrap = True }
    279 283
     tsan :: BuildConfig
    
    280 284
     tsan = vanilla { threadSanitiser = True }
    
    281 285
     
    
    286
    +enableUBSan :: BuildConfig
    
    287
    +enableUBSan = vanilla { withDwarf = True, ubsan = True }
    
    288
    +
    
    282 289
     noTntc :: BuildConfig
    
    283 290
     noTntc = vanilla { tablesNextToCode = False }
    
    284 291
     
    
    ... ... @@ -318,15 +325,15 @@ distroName Debian12Riscv = "deb12-riscv"
    318 325
     distroName Debian12Wine  = "deb12-wine"
    
    319 326
     distroName Debian10      = "deb10"
    
    320 327
     distroName Debian9       = "deb9"
    
    321
    -distroName Fedora42      = "fedora42"
    
    328
    +distroName Fedora43      = "fedora43"
    
    322 329
     distroName Ubuntu2404LoongArch64 = "ubuntu24_04-loongarch"
    
    323 330
     distroName Ubuntu1804    = "ubuntu18_04"
    
    324 331
     distroName Ubuntu2004    = "ubuntu20_04"
    
    325 332
     distroName Ubuntu2204    = "ubuntu22_04"
    
    326 333
     distroName Ubuntu2404    = "ubuntu24_04"
    
    327 334
     distroName Alpine312     = "alpine3_12"
    
    328
    -distroName Alpine322     = "alpine3_22"
    
    329
    -distroName AlpineWasm    = "alpine3_22-wasm"
    
    335
    +distroName Alpine323     = "alpine3_23"
    
    336
    +distroName AlpineWasm    = "alpine3_23-wasm"
    
    330 337
     distroName Rocky8        = "rocky8"
    
    331 338
     
    
    332 339
     opsysName :: Opsys -> String
    
    ... ... @@ -373,6 +380,7 @@ flavourString (Flavour base trans) = base_string base ++ concatMap (("+" ++) . f
    373 380
         flavour_string FullyStatic = "fully_static"
    
    374 381
         flavour_string HostFullyStatic = "host_fully_static"
    
    375 382
         flavour_string ThreadSanitiser = "thread_sanitizer_cmm"
    
    383
    +    flavour_string UBSan = "ubsan"
    
    376 384
         flavour_string NoSplitSections = "no_split_sections"
    
    377 385
         flavour_string BootNonmovingGc = "boot_nonmoving_gc"
    
    378 386
         flavour_string TextWithSIMDUTF = "text_simdutf"
    
    ... ... @@ -497,7 +505,7 @@ alpineVariables arch = mconcat $
    497 505
     
    
    498 506
     distroVariables :: Arch -> LinuxDistro -> Variables
    
    499 507
     distroVariables arch Alpine312 = alpineVariables arch
    
    500
    -distroVariables arch Alpine322 = alpineVariables arch
    
    508
    +distroVariables arch Alpine323 = alpineVariables arch
    
    501 509
     distroVariables _ _ = mempty
    
    502 510
     
    
    503 511
     -----------------------------------------------------------------------------
    
    ... ... @@ -1196,13 +1204,22 @@ rhel_x86 =
    1196 1204
     
    
    1197 1205
     fedora_x86 :: [JobGroup Job]
    
    1198 1206
     fedora_x86 =
    
    1199
    -  [ -- Fedora42 job is always built with perf so there's one job in the normal
    
    1207
    +  [ -- Fedora43 job is always built with perf so there's one job in the normal
    
    1200 1208
         -- validate pipeline which is built with perf.
    
    1201
    -    fastCI (standardBuildsWithConfig Amd64 (Linux Fedora42) releaseConfig)
    
    1209
    +    fastCI (standardBuildsWithConfig Amd64 (Linux Fedora43) releaseConfig)
    
    1202 1210
         -- This job is only for generating head.hackage docs
    
    1203
    -  , hackage_doc_job (disableValidate (standardBuildsWithConfig Amd64 (Linux Fedora42) releaseConfig))
    
    1204
    -  , disableValidate (standardBuildsWithConfig Amd64 (Linux Fedora42) dwarf)
    
    1205
    -  , disableValidate (standardBuilds Amd64 (Linux Fedora42))
    
    1211
    +  , hackage_doc_job (disableValidate (standardBuildsWithConfig Amd64 (Linux Fedora43) releaseConfig))
    
    1212
    +  , disableValidate (standardBuildsWithConfig Amd64 (Linux Fedora43) dwarf)
    
    1213
    +  , disableValidate (standardBuilds Amd64 (Linux Fedora43))
    
    1214
    +    -- For UBSan jobs, only enable for validate/nightly pipelines.
    
    1215
    +    -- Also disable docs since it's not the point for UBSan jobs.
    
    1216
    +  , modifyJobs
    
    1217
    +      ( setVariable "HADRIAN_ARGS" "--docs=none"
    
    1218
    +          . addVariable
    
    1219
    +            "UBSAN_OPTIONS"
    
    1220
    +            "suppressions=$CI_PROJECT_DIR/rts/.ubsan-suppressions"
    
    1221
    +      )
    
    1222
    +      $ validateBuilds Amd64 (Linux Fedora43) enableUBSan
    
    1206 1223
       ]
    
    1207 1224
       where
    
    1208 1225
         hackage_doc_job = rename (<> "-hackage") . modifyJobs (addVariable "HADRIAN_ARGS" "--haddock-for-hackage")
    
    ... ... @@ -1230,8 +1247,8 @@ alpine_x86 =
    1230 1247
         fullyStaticBrokenTests (standardBuildsWithConfig Amd64 (Linux Alpine312) (splitSectionsBroken static))
    
    1231 1248
       , fullyStaticBrokenTests (disableValidate (allowFailureGroup (standardBuildsWithConfig Amd64 (Linux Alpine312) staticNativeInt)))
    
    1232 1249
         -- Dynamically linked build, suitable for building your own static executables on alpine
    
    1233
    -  , disableValidate (standardBuildsWithConfig Amd64 (Linux Alpine322) (splitSectionsBroken vanilla))
    
    1234
    -  , allowFailureGroup (standardBuildsWithConfig I386 (Linux Alpine322) (splitSectionsBroken vanilla))
    
    1250
    +  , disableValidate (standardBuildsWithConfig Amd64 (Linux Alpine323) (splitSectionsBroken vanilla))
    
    1251
    +  , allowFailureGroup (standardBuildsWithConfig I386 (Linux Alpine323) (splitSectionsBroken vanilla))
    
    1235 1252
       ]
    
    1236 1253
       where
    
    1237 1254
         -- ghcilink002 broken due to #17869
    
    ... ... @@ -1242,7 +1259,7 @@ alpine_x86 =
    1242 1259
     
    
    1243 1260
     alpine_aarch64 :: [JobGroup Job]
    
    1244 1261
     alpine_aarch64 = [
    
    1245
    -  disableValidate (standardBuildsWithConfig AArch64 (Linux Alpine322) (splitSectionsBroken vanilla))
    
    1262
    +  disableValidate (standardBuildsWithConfig AArch64 (Linux Alpine323) (splitSectionsBroken vanilla))
    
    1246 1263
       ]
    
    1247 1264
     
    
    1248 1265
     cross_jobs :: [JobGroup Job]
    
    ... ... @@ -1364,28 +1381,28 @@ platform_mapping = Map.map go combined_result
    1364 1381
                     , "x86_64-linux-deb11-validate"
    
    1365 1382
                     , "x86_64-linux-deb12-validate"
    
    1366 1383
                     , "x86_64-linux-deb10-validate+debug_info"
    
    1367
    -                , "x86_64-linux-fedora42-release"
    
    1384
    +                , "x86_64-linux-fedora43-release"
    
    1368 1385
                     , "x86_64-linux-deb11-cross_aarch64-linux-gnu-validate"
    
    1369 1386
                     , "x86_64-windows-validate"
    
    1370 1387
                     , "aarch64-linux-deb12-validate"
    
    1371 1388
                     , "aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate"
    
    1372
    -                , "nightly-x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    1389
    +                , "nightly-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    1373 1390
                     , "nightly-x86_64-linux-deb11-validate"
    
    1374 1391
                     , "nightly-x86_64-linux-deb12-validate"
    
    1375
    -                , "x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    1392
    +                , "x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    1376 1393
                     , "x86_64-linux-deb12-validate+thread_sanitizer_cmm"
    
    1377 1394
                     , "nightly-aarch64-linux-deb10-validate"
    
    1378 1395
                     , "nightly-aarch64-linux-deb12-validate"
    
    1379 1396
                     , "nightly-aarch64-linux-deb12-wine-int_native-cross_aarch64-unknown-mingw32-validate"
    
    1380 1397
                     , "nightly-x86_64-linux-alpine3_12-validate+fully_static"
    
    1381 1398
                     , "nightly-x86_64-linux-deb10-validate"
    
    1382
    -                , "nightly-x86_64-linux-fedora42-release"
    
    1399
    +                , "nightly-x86_64-linux-fedora43-release"
    
    1383 1400
                     , "nightly-x86_64-windows-validate"
    
    1384 1401
                     , "release-x86_64-linux-alpine3_12-release+fully_static+no_split_sections"
    
    1385 1402
                     , "release-x86_64-linux-deb10-release"
    
    1386 1403
                     , "release-x86_64-linux-deb11-release"
    
    1387 1404
                     , "release-x86_64-linux-deb12-release"
    
    1388
    -                , "release-x86_64-linux-fedora42-release"
    
    1405
    +                , "release-x86_64-linux-fedora43-release"
    
    1389 1406
                     , "release-x86_64-windows-release"
    
    1390 1407
                     ]
    
    1391 1408
     
    

  • .gitlab/jobs.yaml
    ... ... @@ -66,7 +66,7 @@
    66 66
           "TEST_ENV": "aarch64-darwin-validate"
    
    67 67
         }
    
    68 68
       },
    
    69
    -  "aarch64-linux-alpine3_22-validate": {
    
    69
    +  "aarch64-linux-alpine3_23-validate": {
    
    70 70
         "after_script": [
    
    71 71
           ".gitlab/ci.sh save_cache",
    
    72 72
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -77,7 +77,7 @@
    77 77
         "artifacts": {
    
    78 78
           "expire_in": "2 weeks",
    
    79 79
           "paths": [
    
    80
    -        "ghc-aarch64-linux-alpine3_22-validate.tar.xz",
    
    80
    +        "ghc-aarch64-linux-alpine3_23-validate.tar.xz",
    
    81 81
             "junit.xml",
    
    82 82
             "unexpected-test-output.tar.gz"
    
    83 83
           ],
    
    ... ... @@ -87,14 +87,14 @@
    87 87
           "when": "always"
    
    88 88
         },
    
    89 89
         "cache": {
    
    90
    -      "key": "aarch64-linux-alpine3_22-$CACHE_REV",
    
    90
    +      "key": "aarch64-linux-alpine3_23-$CACHE_REV",
    
    91 91
           "paths": [
    
    92 92
             "cabal-cache",
    
    93 93
             "toolchain"
    
    94 94
           ]
    
    95 95
         },
    
    96 96
         "dependencies": [],
    
    97
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-alpine3_22:$DOCKER_REV",
    
    97
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-alpine3_23:$DOCKER_REV",
    
    98 98
         "needs": [
    
    99 99
           {
    
    100 100
             "artifacts": false,
    
    ... ... @@ -103,7 +103,7 @@
    103 103
         ],
    
    104 104
         "rules": [
    
    105 105
           {
    
    106
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\baarch64-linux-alpine3_22-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    106
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\baarch64-linux-alpine3_23-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    107 107
             "when": "on_success"
    
    108 108
           }
    
    109 109
         ],
    
    ... ... @@ -120,13 +120,13 @@
    120 120
         ],
    
    121 121
         "variables": {
    
    122 122
           "BIGNUM_BACKEND": "gmp",
    
    123
    -      "BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_22-validate",
    
    123
    +      "BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_23-validate",
    
    124 124
           "BROKEN_TESTS": "encoding004 T10458",
    
    125 125
           "BUILD_FLAVOUR": "validate",
    
    126 126
           "CONFIGURE_ARGS": "--disable-ld-override --enable-ignore-build-platform-mismatch --build=aarch64-unknown-linux --host=aarch64-unknown-linux --target=aarch64-unknown-linux --enable-strict-ghc-toolchain-check",
    
    127 127
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    128 128
           "RUNTEST_ARGS": "",
    
    129
    -      "TEST_ENV": "aarch64-linux-alpine3_22-validate"
    
    129
    +      "TEST_ENV": "aarch64-linux-alpine3_23-validate"
    
    130 130
         }
    
    131 131
       },
    
    132 132
       "aarch64-linux-deb10-validate": {
    
    ... ... @@ -477,7 +477,7 @@
    477 477
           "WindresCmd": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-windres"
    
    478 478
         }
    
    479 479
       },
    
    480
    -  "i386-linux-alpine3_22-validate": {
    
    480
    +  "i386-linux-alpine3_23-validate": {
    
    481 481
         "after_script": [
    
    482 482
           ".gitlab/ci.sh save_cache",
    
    483 483
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -488,7 +488,7 @@
    488 488
         "artifacts": {
    
    489 489
           "expire_in": "2 weeks",
    
    490 490
           "paths": [
    
    491
    -        "ghc-i386-linux-alpine3_22-validate.tar.xz",
    
    491
    +        "ghc-i386-linux-alpine3_23-validate.tar.xz",
    
    492 492
             "junit.xml",
    
    493 493
             "unexpected-test-output.tar.gz"
    
    494 494
           ],
    
    ... ... @@ -498,14 +498,14 @@
    498 498
           "when": "always"
    
    499 499
         },
    
    500 500
         "cache": {
    
    501
    -      "key": "i386-linux-alpine3_22-$CACHE_REV",
    
    501
    +      "key": "i386-linux-alpine3_23-$CACHE_REV",
    
    502 502
           "paths": [
    
    503 503
             "cabal-cache",
    
    504 504
             "toolchain"
    
    505 505
           ]
    
    506 506
         },
    
    507 507
         "dependencies": [],
    
    508
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-alpine3_22:$DOCKER_REV",
    
    508
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-alpine3_23:$DOCKER_REV",
    
    509 509
         "needs": [
    
    510 510
           {
    
    511 511
             "artifacts": false,
    
    ... ... @@ -514,7 +514,7 @@
    514 514
         ],
    
    515 515
         "rules": [
    
    516 516
           {
    
    517
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bi386-linux-alpine3_22-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    517
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bi386-linux-alpine3_23-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    518 518
             "when": "on_success"
    
    519 519
           }
    
    520 520
         ],
    
    ... ... @@ -531,13 +531,13 @@
    531 531
         ],
    
    532 532
         "variables": {
    
    533 533
           "BIGNUM_BACKEND": "gmp",
    
    534
    -      "BIN_DIST_NAME": "ghc-i386-linux-alpine3_22-validate",
    
    534
    +      "BIN_DIST_NAME": "ghc-i386-linux-alpine3_23-validate",
    
    535 535
           "BROKEN_TESTS": "encoding004 T10458 simd009 T25169",
    
    536 536
           "BUILD_FLAVOUR": "validate",
    
    537 537
           "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    538 538
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    539 539
           "RUNTEST_ARGS": "",
    
    540
    -      "TEST_ENV": "i386-linux-alpine3_22-validate"
    
    540
    +      "TEST_ENV": "i386-linux-alpine3_23-validate"
    
    541 541
         }
    
    542 542
       },
    
    543 543
       "i386-linux-deb10-validate": {
    
    ... ... @@ -731,7 +731,7 @@
    731 731
           "XZ_OPT": "-9"
    
    732 732
         }
    
    733 733
       },
    
    734
    -  "nightly-aarch64-linux-alpine3_22-validate": {
    
    734
    +  "nightly-aarch64-linux-alpine3_23-validate": {
    
    735 735
         "after_script": [
    
    736 736
           ".gitlab/ci.sh save_cache",
    
    737 737
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -742,7 +742,7 @@
    742 742
         "artifacts": {
    
    743 743
           "expire_in": "8 weeks",
    
    744 744
           "paths": [
    
    745
    -        "ghc-aarch64-linux-alpine3_22-validate.tar.xz",
    
    745
    +        "ghc-aarch64-linux-alpine3_23-validate.tar.xz",
    
    746 746
             "junit.xml",
    
    747 747
             "unexpected-test-output.tar.gz"
    
    748 748
           ],
    
    ... ... @@ -752,14 +752,14 @@
    752 752
           "when": "always"
    
    753 753
         },
    
    754 754
         "cache": {
    
    755
    -      "key": "aarch64-linux-alpine3_22-$CACHE_REV",
    
    755
    +      "key": "aarch64-linux-alpine3_23-$CACHE_REV",
    
    756 756
           "paths": [
    
    757 757
             "cabal-cache",
    
    758 758
             "toolchain"
    
    759 759
           ]
    
    760 760
         },
    
    761 761
         "dependencies": [],
    
    762
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-alpine3_22:$DOCKER_REV",
    
    762
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-alpine3_23:$DOCKER_REV",
    
    763 763
         "needs": [
    
    764 764
           {
    
    765 765
             "artifacts": false,
    
    ... ... @@ -785,13 +785,13 @@
    785 785
         ],
    
    786 786
         "variables": {
    
    787 787
           "BIGNUM_BACKEND": "gmp",
    
    788
    -      "BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_22-validate",
    
    788
    +      "BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_23-validate",
    
    789 789
           "BROKEN_TESTS": "encoding004 T10458",
    
    790 790
           "BUILD_FLAVOUR": "validate",
    
    791 791
           "CONFIGURE_ARGS": "--disable-ld-override --enable-ignore-build-platform-mismatch --build=aarch64-unknown-linux --host=aarch64-unknown-linux --target=aarch64-unknown-linux --enable-strict-ghc-toolchain-check",
    
    792 792
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    793 793
           "RUNTEST_ARGS": "",
    
    794
    -      "TEST_ENV": "aarch64-linux-alpine3_22-validate",
    
    794
    +      "TEST_ENV": "aarch64-linux-alpine3_23-validate",
    
    795 795
           "XZ_OPT": "-9"
    
    796 796
         }
    
    797 797
       },
    
    ... ... @@ -1148,7 +1148,7 @@
    1148 1148
           "XZ_OPT": "-9"
    
    1149 1149
         }
    
    1150 1150
       },
    
    1151
    -  "nightly-i386-linux-alpine3_22-validate": {
    
    1151
    +  "nightly-i386-linux-alpine3_23-validate": {
    
    1152 1152
         "after_script": [
    
    1153 1153
           ".gitlab/ci.sh save_cache",
    
    1154 1154
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -1159,7 +1159,7 @@
    1159 1159
         "artifacts": {
    
    1160 1160
           "expire_in": "8 weeks",
    
    1161 1161
           "paths": [
    
    1162
    -        "ghc-i386-linux-alpine3_22-validate.tar.xz",
    
    1162
    +        "ghc-i386-linux-alpine3_23-validate.tar.xz",
    
    1163 1163
             "junit.xml",
    
    1164 1164
             "unexpected-test-output.tar.gz"
    
    1165 1165
           ],
    
    ... ... @@ -1169,14 +1169,14 @@
    1169 1169
           "when": "always"
    
    1170 1170
         },
    
    1171 1171
         "cache": {
    
    1172
    -      "key": "i386-linux-alpine3_22-$CACHE_REV",
    
    1172
    +      "key": "i386-linux-alpine3_23-$CACHE_REV",
    
    1173 1173
           "paths": [
    
    1174 1174
             "cabal-cache",
    
    1175 1175
             "toolchain"
    
    1176 1176
           ]
    
    1177 1177
         },
    
    1178 1178
         "dependencies": [],
    
    1179
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-alpine3_22:$DOCKER_REV",
    
    1179
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-alpine3_23:$DOCKER_REV",
    
    1180 1180
         "needs": [
    
    1181 1181
           {
    
    1182 1182
             "artifacts": false,
    
    ... ... @@ -1202,13 +1202,13 @@
    1202 1202
         ],
    
    1203 1203
         "variables": {
    
    1204 1204
           "BIGNUM_BACKEND": "gmp",
    
    1205
    -      "BIN_DIST_NAME": "ghc-i386-linux-alpine3_22-validate",
    
    1205
    +      "BIN_DIST_NAME": "ghc-i386-linux-alpine3_23-validate",
    
    1206 1206
           "BROKEN_TESTS": "encoding004 T10458 simd009 T25169",
    
    1207 1207
           "BUILD_FLAVOUR": "validate",
    
    1208 1208
           "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    1209 1209
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    1210 1210
           "RUNTEST_ARGS": "",
    
    1211
    -      "TEST_ENV": "i386-linux-alpine3_22-validate",
    
    1211
    +      "TEST_ENV": "i386-linux-alpine3_23-validate",
    
    1212 1212
           "XZ_OPT": "-9"
    
    1213 1213
         }
    
    1214 1214
       },
    
    ... ... @@ -1602,7 +1602,7 @@
    1602 1602
           "XZ_OPT": "-9"
    
    1603 1603
         }
    
    1604 1604
       },
    
    1605
    -  "nightly-x86_64-linux-alpine3_22-validate": {
    
    1605
    +  "nightly-x86_64-linux-alpine3_23-validate": {
    
    1606 1606
         "after_script": [
    
    1607 1607
           ".gitlab/ci.sh save_cache",
    
    1608 1608
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -1613,7 +1613,7 @@
    1613 1613
         "artifacts": {
    
    1614 1614
           "expire_in": "8 weeks",
    
    1615 1615
           "paths": [
    
    1616
    -        "ghc-x86_64-linux-alpine3_22-validate.tar.xz",
    
    1616
    +        "ghc-x86_64-linux-alpine3_23-validate.tar.xz",
    
    1617 1617
             "junit.xml",
    
    1618 1618
             "unexpected-test-output.tar.gz"
    
    1619 1619
           ],
    
    ... ... @@ -1623,14 +1623,14 @@
    1623 1623
           "when": "always"
    
    1624 1624
         },
    
    1625 1625
         "cache": {
    
    1626
    -      "key": "x86_64-linux-alpine3_22-$CACHE_REV",
    
    1626
    +      "key": "x86_64-linux-alpine3_23-$CACHE_REV",
    
    1627 1627
           "paths": [
    
    1628 1628
             "cabal-cache",
    
    1629 1629
             "toolchain"
    
    1630 1630
           ]
    
    1631 1631
         },
    
    1632 1632
         "dependencies": [],
    
    1633
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22:$DOCKER_REV",
    
    1633
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23:$DOCKER_REV",
    
    1634 1634
         "needs": [
    
    1635 1635
           {
    
    1636 1636
             "artifacts": false,
    
    ... ... @@ -1656,17 +1656,17 @@
    1656 1656
         ],
    
    1657 1657
         "variables": {
    
    1658 1658
           "BIGNUM_BACKEND": "gmp",
    
    1659
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-validate",
    
    1659
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-validate",
    
    1660 1660
           "BROKEN_TESTS": "encoding004 T10458",
    
    1661 1661
           "BUILD_FLAVOUR": "validate",
    
    1662 1662
           "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    1663 1663
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    1664 1664
           "RUNTEST_ARGS": "",
    
    1665
    -      "TEST_ENV": "x86_64-linux-alpine3_22-validate",
    
    1665
    +      "TEST_ENV": "x86_64-linux-alpine3_23-validate",
    
    1666 1666
           "XZ_OPT": "-9"
    
    1667 1667
         }
    
    1668 1668
       },
    
    1669
    -  "nightly-x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    1669
    +  "nightly-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    1670 1670
         "after_script": [
    
    1671 1671
           ".gitlab/ci.sh save_cache",
    
    1672 1672
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -1677,7 +1677,7 @@
    1677 1677
         "artifacts": {
    
    1678 1678
           "expire_in": "8 weeks",
    
    1679 1679
           "paths": [
    
    1680
    -        "ghc-x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    1680
    +        "ghc-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    1681 1681
             "junit.xml",
    
    1682 1682
             "unexpected-test-output.tar.gz"
    
    1683 1683
           ],
    
    ... ... @@ -1687,14 +1687,14 @@
    1687 1687
           "when": "always"
    
    1688 1688
         },
    
    1689 1689
         "cache": {
    
    1690
    -      "key": "x86_64-linux-alpine3_22-wasm-$CACHE_REV",
    
    1690
    +      "key": "x86_64-linux-alpine3_23-wasm-$CACHE_REV",
    
    1691 1691
           "paths": [
    
    1692 1692
             "cabal-cache",
    
    1693 1693
             "toolchain"
    
    1694 1694
           ]
    
    1695 1695
         },
    
    1696 1696
         "dependencies": [],
    
    1697
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22-wasm:$DOCKER_REV",
    
    1697
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23-wasm:$DOCKER_REV",
    
    1698 1698
         "needs": [
    
    1699 1699
           {
    
    1700 1700
             "artifacts": false,
    
    ... ... @@ -1720,18 +1720,18 @@
    1720 1720
         ],
    
    1721 1721
         "variables": {
    
    1722 1722
           "BIGNUM_BACKEND": "gmp",
    
    1723
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1723
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1724 1724
           "BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
    
    1725 1725
           "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
    
    1726 1726
           "CROSS_TARGET": "wasm32-wasi",
    
    1727 1727
           "FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
    
    1728 1728
           "HADRIAN_ARGS": "--docs=no-sphinx-pdfs --docs=no-sphinx-man",
    
    1729 1729
           "RUNTEST_ARGS": "",
    
    1730
    -      "TEST_ENV": "x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1730
    +      "TEST_ENV": "x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1731 1731
           "XZ_OPT": "-9"
    
    1732 1732
         }
    
    1733 1733
       },
    
    1734
    -  "nightly-x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    1734
    +  "nightly-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    1735 1735
         "after_script": [
    
    1736 1736
           ".gitlab/ci.sh save_cache",
    
    1737 1737
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -1742,7 +1742,7 @@
    1742 1742
         "artifacts": {
    
    1743 1743
           "expire_in": "8 weeks",
    
    1744 1744
           "paths": [
    
    1745
    -        "ghc-x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    1745
    +        "ghc-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    1746 1746
             "junit.xml",
    
    1747 1747
             "unexpected-test-output.tar.gz"
    
    1748 1748
           ],
    
    ... ... @@ -1752,14 +1752,14 @@
    1752 1752
           "when": "always"
    
    1753 1753
         },
    
    1754 1754
         "cache": {
    
    1755
    -      "key": "x86_64-linux-alpine3_22-wasm-$CACHE_REV",
    
    1755
    +      "key": "x86_64-linux-alpine3_23-wasm-$CACHE_REV",
    
    1756 1756
           "paths": [
    
    1757 1757
             "cabal-cache",
    
    1758 1758
             "toolchain"
    
    1759 1759
           ]
    
    1760 1760
         },
    
    1761 1761
         "dependencies": [],
    
    1762
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22-wasm:$DOCKER_REV",
    
    1762
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23-wasm:$DOCKER_REV",
    
    1763 1763
         "needs": [
    
    1764 1764
           {
    
    1765 1765
             "artifacts": false,
    
    ... ... @@ -1785,18 +1785,18 @@
    1785 1785
         ],
    
    1786 1786
         "variables": {
    
    1787 1787
           "BIGNUM_BACKEND": "native",
    
    1788
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1788
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1789 1789
           "BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
    
    1790 1790
           "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
    
    1791 1791
           "CROSS_TARGET": "wasm32-wasi",
    
    1792 1792
           "FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
    
    1793 1793
           "HADRIAN_ARGS": "--docs=no-sphinx-pdfs --docs=no-sphinx-man",
    
    1794 1794
           "RUNTEST_ARGS": "",
    
    1795
    -      "TEST_ENV": "x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1795
    +      "TEST_ENV": "x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1796 1796
           "XZ_OPT": "-9"
    
    1797 1797
         }
    
    1798 1798
       },
    
    1799
    -  "nightly-x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    1799
    +  "nightly-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    1800 1800
         "after_script": [
    
    1801 1801
           ".gitlab/ci.sh save_cache",
    
    1802 1802
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -1807,7 +1807,7 @@
    1807 1807
         "artifacts": {
    
    1808 1808
           "expire_in": "8 weeks",
    
    1809 1809
           "paths": [
    
    1810
    -        "ghc-x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    1810
    +        "ghc-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    1811 1811
             "junit.xml",
    
    1812 1812
             "unexpected-test-output.tar.gz"
    
    1813 1813
           ],
    
    ... ... @@ -1817,14 +1817,14 @@
    1817 1817
           "when": "always"
    
    1818 1818
         },
    
    1819 1819
         "cache": {
    
    1820
    -      "key": "x86_64-linux-alpine3_22-wasm-$CACHE_REV",
    
    1820
    +      "key": "x86_64-linux-alpine3_23-wasm-$CACHE_REV",
    
    1821 1821
           "paths": [
    
    1822 1822
             "cabal-cache",
    
    1823 1823
             "toolchain"
    
    1824 1824
           ]
    
    1825 1825
         },
    
    1826 1826
         "dependencies": [],
    
    1827
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22-wasm:$DOCKER_REV",
    
    1827
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23-wasm:$DOCKER_REV",
    
    1828 1828
         "needs": [
    
    1829 1829
           {
    
    1830 1830
             "artifacts": false,
    
    ... ... @@ -1850,14 +1850,14 @@
    1850 1850
         ],
    
    1851 1851
         "variables": {
    
    1852 1852
           "BIGNUM_BACKEND": "gmp",
    
    1853
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1853
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1854 1854
           "BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
    
    1855 1855
           "CONFIGURE_ARGS": "--enable-unregisterised --with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
    
    1856 1856
           "CROSS_TARGET": "wasm32-wasi",
    
    1857 1857
           "FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
    
    1858 1858
           "HADRIAN_ARGS": "--docs=no-sphinx-pdfs --docs=no-sphinx-man",
    
    1859 1859
           "RUNTEST_ARGS": "",
    
    1860
    -      "TEST_ENV": "x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1860
    +      "TEST_ENV": "x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    1861 1861
           "XZ_OPT": "-9"
    
    1862 1862
         }
    
    1863 1863
       },
    
    ... ... @@ -2942,7 +2942,7 @@
    2942 2942
           "XZ_OPT": "-9"
    
    2943 2943
         }
    
    2944 2944
       },
    
    2945
    -  "nightly-x86_64-linux-fedora42-release": {
    
    2945
    +  "nightly-x86_64-linux-fedora43-release": {
    
    2946 2946
         "after_script": [
    
    2947 2947
           ".gitlab/ci.sh save_cache",
    
    2948 2948
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -2953,7 +2953,7 @@
    2953 2953
         "artifacts": {
    
    2954 2954
           "expire_in": "8 weeks",
    
    2955 2955
           "paths": [
    
    2956
    -        "ghc-x86_64-linux-fedora42-release.tar.xz",
    
    2956
    +        "ghc-x86_64-linux-fedora43-release.tar.xz",
    
    2957 2957
             "junit.xml",
    
    2958 2958
             "unexpected-test-output.tar.gz"
    
    2959 2959
           ],
    
    ... ... @@ -2963,14 +2963,14 @@
    2963 2963
           "when": "always"
    
    2964 2964
         },
    
    2965 2965
         "cache": {
    
    2966
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    2966
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    2967 2967
           "paths": [
    
    2968 2968
             "cabal-cache",
    
    2969 2969
             "toolchain"
    
    2970 2970
           ]
    
    2971 2971
         },
    
    2972 2972
         "dependencies": [],
    
    2973
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    2973
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    2974 2974
         "needs": [
    
    2975 2975
           {
    
    2976 2976
             "artifacts": false,
    
    ... ... @@ -2996,16 +2996,16 @@
    2996 2996
         ],
    
    2997 2997
         "variables": {
    
    2998 2998
           "BIGNUM_BACKEND": "gmp",
    
    2999
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release",
    
    2999
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
    
    3000 3000
           "BUILD_FLAVOUR": "release",
    
    3001 3001
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3002 3002
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3003 3003
           "RUNTEST_ARGS": "",
    
    3004
    -      "TEST_ENV": "x86_64-linux-fedora42-release",
    
    3004
    +      "TEST_ENV": "x86_64-linux-fedora43-release",
    
    3005 3005
           "XZ_OPT": "-9"
    
    3006 3006
         }
    
    3007 3007
       },
    
    3008
    -  "nightly-x86_64-linux-fedora42-release-hackage": {
    
    3008
    +  "nightly-x86_64-linux-fedora43-release-hackage": {
    
    3009 3009
         "after_script": [
    
    3010 3010
           ".gitlab/ci.sh save_cache",
    
    3011 3011
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -3016,7 +3016,7 @@
    3016 3016
         "artifacts": {
    
    3017 3017
           "expire_in": "8 weeks",
    
    3018 3018
           "paths": [
    
    3019
    -        "ghc-x86_64-linux-fedora42-release.tar.xz",
    
    3019
    +        "ghc-x86_64-linux-fedora43-release.tar.xz",
    
    3020 3020
             "junit.xml",
    
    3021 3021
             "unexpected-test-output.tar.gz"
    
    3022 3022
           ],
    
    ... ... @@ -3026,14 +3026,14 @@
    3026 3026
           "when": "always"
    
    3027 3027
         },
    
    3028 3028
         "cache": {
    
    3029
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    3029
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    3030 3030
           "paths": [
    
    3031 3031
             "cabal-cache",
    
    3032 3032
             "toolchain"
    
    3033 3033
           ]
    
    3034 3034
         },
    
    3035 3035
         "dependencies": [],
    
    3036
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    3036
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    3037 3037
         "needs": [
    
    3038 3038
           {
    
    3039 3039
             "artifacts": false,
    
    ... ... @@ -3059,17 +3059,17 @@
    3059 3059
         ],
    
    3060 3060
         "variables": {
    
    3061 3061
           "BIGNUM_BACKEND": "gmp",
    
    3062
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release",
    
    3062
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
    
    3063 3063
           "BUILD_FLAVOUR": "release",
    
    3064 3064
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3065 3065
           "HADRIAN_ARGS": "--haddock-for-hackage",
    
    3066 3066
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3067 3067
           "RUNTEST_ARGS": "",
    
    3068
    -      "TEST_ENV": "x86_64-linux-fedora42-release",
    
    3068
    +      "TEST_ENV": "x86_64-linux-fedora43-release",
    
    3069 3069
           "XZ_OPT": "-9"
    
    3070 3070
         }
    
    3071 3071
       },
    
    3072
    -  "nightly-x86_64-linux-fedora42-validate": {
    
    3072
    +  "nightly-x86_64-linux-fedora43-validate": {
    
    3073 3073
         "after_script": [
    
    3074 3074
           ".gitlab/ci.sh save_cache",
    
    3075 3075
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -3080,7 +3080,7 @@
    3080 3080
         "artifacts": {
    
    3081 3081
           "expire_in": "8 weeks",
    
    3082 3082
           "paths": [
    
    3083
    -        "ghc-x86_64-linux-fedora42-validate.tar.xz",
    
    3083
    +        "ghc-x86_64-linux-fedora43-validate.tar.xz",
    
    3084 3084
             "junit.xml",
    
    3085 3085
             "unexpected-test-output.tar.gz"
    
    3086 3086
           ],
    
    ... ... @@ -3090,14 +3090,14 @@
    3090 3090
           "when": "always"
    
    3091 3091
         },
    
    3092 3092
         "cache": {
    
    3093
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    3093
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    3094 3094
           "paths": [
    
    3095 3095
             "cabal-cache",
    
    3096 3096
             "toolchain"
    
    3097 3097
           ]
    
    3098 3098
         },
    
    3099 3099
         "dependencies": [],
    
    3100
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    3100
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    3101 3101
         "needs": [
    
    3102 3102
           {
    
    3103 3103
             "artifacts": false,
    
    ... ... @@ -3123,16 +3123,16 @@
    3123 3123
         ],
    
    3124 3124
         "variables": {
    
    3125 3125
           "BIGNUM_BACKEND": "gmp",
    
    3126
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-validate",
    
    3126
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate",
    
    3127 3127
           "BUILD_FLAVOUR": "validate",
    
    3128 3128
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3129 3129
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3130 3130
           "RUNTEST_ARGS": "",
    
    3131
    -      "TEST_ENV": "x86_64-linux-fedora42-validate",
    
    3131
    +      "TEST_ENV": "x86_64-linux-fedora43-validate",
    
    3132 3132
           "XZ_OPT": "-9"
    
    3133 3133
         }
    
    3134 3134
       },
    
    3135
    -  "nightly-x86_64-linux-fedora42-validate+debug_info": {
    
    3135
    +  "nightly-x86_64-linux-fedora43-validate+debug_info": {
    
    3136 3136
         "after_script": [
    
    3137 3137
           ".gitlab/ci.sh save_cache",
    
    3138 3138
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -3143,7 +3143,7 @@
    3143 3143
         "artifacts": {
    
    3144 3144
           "expire_in": "8 weeks",
    
    3145 3145
           "paths": [
    
    3146
    -        "ghc-x86_64-linux-fedora42-validate+debug_info.tar.xz",
    
    3146
    +        "ghc-x86_64-linux-fedora43-validate+debug_info.tar.xz",
    
    3147 3147
             "junit.xml",
    
    3148 3148
             "unexpected-test-output.tar.gz"
    
    3149 3149
           ],
    
    ... ... @@ -3153,14 +3153,14 @@
    3153 3153
           "when": "always"
    
    3154 3154
         },
    
    3155 3155
         "cache": {
    
    3156
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    3156
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    3157 3157
           "paths": [
    
    3158 3158
             "cabal-cache",
    
    3159 3159
             "toolchain"
    
    3160 3160
           ]
    
    3161 3161
         },
    
    3162 3162
         "dependencies": [],
    
    3163
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    3163
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    3164 3164
         "needs": [
    
    3165 3165
           {
    
    3166 3166
             "artifacts": false,
    
    ... ... @@ -3186,12 +3186,77 @@
    3186 3186
         ],
    
    3187 3187
         "variables": {
    
    3188 3188
           "BIGNUM_BACKEND": "gmp",
    
    3189
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-validate+debug_info",
    
    3189
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info",
    
    3190 3190
           "BUILD_FLAVOUR": "validate+debug_info",
    
    3191 3191
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3192 3192
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3193 3193
           "RUNTEST_ARGS": "",
    
    3194
    -      "TEST_ENV": "x86_64-linux-fedora42-validate+debug_info",
    
    3194
    +      "TEST_ENV": "x86_64-linux-fedora43-validate+debug_info",
    
    3195
    +      "XZ_OPT": "-9"
    
    3196
    +    }
    
    3197
    +  },
    
    3198
    +  "nightly-x86_64-linux-fedora43-validate+debug_info+ubsan": {
    
    3199
    +    "after_script": [
    
    3200
    +      ".gitlab/ci.sh save_cache",
    
    3201
    +      ".gitlab/ci.sh save_test_output",
    
    3202
    +      ".gitlab/ci.sh clean",
    
    3203
    +      "cat ci_timings.txt"
    
    3204
    +    ],
    
    3205
    +    "allow_failure": false,
    
    3206
    +    "artifacts": {
    
    3207
    +      "expire_in": "8 weeks",
    
    3208
    +      "paths": [
    
    3209
    +        "ghc-x86_64-linux-fedora43-validate+debug_info+ubsan.tar.xz",
    
    3210
    +        "junit.xml",
    
    3211
    +        "unexpected-test-output.tar.gz"
    
    3212
    +      ],
    
    3213
    +      "reports": {
    
    3214
    +        "junit": "junit.xml"
    
    3215
    +      },
    
    3216
    +      "when": "always"
    
    3217
    +    },
    
    3218
    +    "cache": {
    
    3219
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    3220
    +      "paths": [
    
    3221
    +        "cabal-cache",
    
    3222
    +        "toolchain"
    
    3223
    +      ]
    
    3224
    +    },
    
    3225
    +    "dependencies": [],
    
    3226
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    3227
    +    "needs": [
    
    3228
    +      {
    
    3229
    +        "artifacts": false,
    
    3230
    +        "job": "hadrian-ghc-in-ghci"
    
    3231
    +      }
    
    3232
    +    ],
    
    3233
    +    "rules": [
    
    3234
    +      {
    
    3235
    +        "if": "(\"true\" == \"true\") && ($RELEASE_JOB != \"yes\") && ($NIGHTLY)",
    
    3236
    +        "when": "on_success"
    
    3237
    +      }
    
    3238
    +    ],
    
    3239
    +    "script": [
    
    3240
    +      "sudo chown ghc:ghc -R .",
    
    3241
    +      ".gitlab/ci.sh setup",
    
    3242
    +      ".gitlab/ci.sh configure",
    
    3243
    +      ".gitlab/ci.sh build_hadrian",
    
    3244
    +      ".gitlab/ci.sh test_hadrian"
    
    3245
    +    ],
    
    3246
    +    "stage": "full-build",
    
    3247
    +    "tags": [
    
    3248
    +      "x86_64-linux"
    
    3249
    +    ],
    
    3250
    +    "variables": {
    
    3251
    +      "BIGNUM_BACKEND": "gmp",
    
    3252
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info+ubsan",
    
    3253
    +      "BUILD_FLAVOUR": "validate+debug_info+ubsan",
    
    3254
    +      "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3255
    +      "HADRIAN_ARGS": "--docs=none",
    
    3256
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    3257
    +      "RUNTEST_ARGS": "",
    
    3258
    +      "TEST_ENV": "x86_64-linux-fedora43-validate+debug_info+ubsan",
    
    3259
    +      "UBSAN_OPTIONS": "suppressions=$CI_PROJECT_DIR/rts/.ubsan-suppressions",
    
    3195 3260
           "XZ_OPT": "-9"
    
    3196 3261
         }
    
    3197 3262
       },
    
    ... ... @@ -3769,7 +3834,7 @@
    3769 3834
           "XZ_OPT": "-9"
    
    3770 3835
         }
    
    3771 3836
       },
    
    3772
    -  "release-aarch64-linux-alpine3_22-release+no_split_sections": {
    
    3837
    +  "release-aarch64-linux-alpine3_23-release+no_split_sections": {
    
    3773 3838
         "after_script": [
    
    3774 3839
           ".gitlab/ci.sh save_cache",
    
    3775 3840
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -3780,7 +3845,7 @@
    3780 3845
         "artifacts": {
    
    3781 3846
           "expire_in": "1 year",
    
    3782 3847
           "paths": [
    
    3783
    -        "ghc-aarch64-linux-alpine3_22-release+no_split_sections.tar.xz",
    
    3848
    +        "ghc-aarch64-linux-alpine3_23-release+no_split_sections.tar.xz",
    
    3784 3849
             "junit.xml",
    
    3785 3850
             "unexpected-test-output.tar.gz"
    
    3786 3851
           ],
    
    ... ... @@ -3790,14 +3855,14 @@
    3790 3855
           "when": "always"
    
    3791 3856
         },
    
    3792 3857
         "cache": {
    
    3793
    -      "key": "aarch64-linux-alpine3_22-$CACHE_REV",
    
    3858
    +      "key": "aarch64-linux-alpine3_23-$CACHE_REV",
    
    3794 3859
           "paths": [
    
    3795 3860
             "cabal-cache",
    
    3796 3861
             "toolchain"
    
    3797 3862
           ]
    
    3798 3863
         },
    
    3799 3864
         "dependencies": [],
    
    3800
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-alpine3_22:$DOCKER_REV",
    
    3865
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/aarch64-linux-alpine3_23:$DOCKER_REV",
    
    3801 3866
         "needs": [
    
    3802 3867
           {
    
    3803 3868
             "artifacts": false,
    
    ... ... @@ -3823,14 +3888,14 @@
    3823 3888
         ],
    
    3824 3889
         "variables": {
    
    3825 3890
           "BIGNUM_BACKEND": "gmp",
    
    3826
    -      "BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_22-release+no_split_sections",
    
    3891
    +      "BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_23-release+no_split_sections",
    
    3827 3892
           "BROKEN_TESTS": "encoding004 T10458",
    
    3828 3893
           "BUILD_FLAVOUR": "release+no_split_sections",
    
    3829 3894
           "CONFIGURE_ARGS": "--disable-ld-override --enable-ignore-build-platform-mismatch --build=aarch64-unknown-linux --host=aarch64-unknown-linux --target=aarch64-unknown-linux --enable-strict-ghc-toolchain-check",
    
    3830 3895
           "IGNORE_PERF_FAILURES": "all",
    
    3831 3896
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    3832 3897
           "RUNTEST_ARGS": "",
    
    3833
    -      "TEST_ENV": "aarch64-linux-alpine3_22-release+no_split_sections",
    
    3898
    +      "TEST_ENV": "aarch64-linux-alpine3_23-release+no_split_sections",
    
    3834 3899
           "XZ_OPT": "-9"
    
    3835 3900
         }
    
    3836 3901
       },
    
    ... ... @@ -3962,7 +4027,7 @@
    3962 4027
           "XZ_OPT": "-9"
    
    3963 4028
         }
    
    3964 4029
       },
    
    3965
    -  "release-i386-linux-alpine3_22-release+no_split_sections": {
    
    4030
    +  "release-i386-linux-alpine3_23-release+no_split_sections": {
    
    3966 4031
         "after_script": [
    
    3967 4032
           ".gitlab/ci.sh save_cache",
    
    3968 4033
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -3973,7 +4038,7 @@
    3973 4038
         "artifacts": {
    
    3974 4039
           "expire_in": "1 year",
    
    3975 4040
           "paths": [
    
    3976
    -        "ghc-i386-linux-alpine3_22-release+no_split_sections.tar.xz",
    
    4041
    +        "ghc-i386-linux-alpine3_23-release+no_split_sections.tar.xz",
    
    3977 4042
             "junit.xml",
    
    3978 4043
             "unexpected-test-output.tar.gz"
    
    3979 4044
           ],
    
    ... ... @@ -3983,14 +4048,14 @@
    3983 4048
           "when": "always"
    
    3984 4049
         },
    
    3985 4050
         "cache": {
    
    3986
    -      "key": "i386-linux-alpine3_22-$CACHE_REV",
    
    4051
    +      "key": "i386-linux-alpine3_23-$CACHE_REV",
    
    3987 4052
           "paths": [
    
    3988 4053
             "cabal-cache",
    
    3989 4054
             "toolchain"
    
    3990 4055
           ]
    
    3991 4056
         },
    
    3992 4057
         "dependencies": [],
    
    3993
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-alpine3_22:$DOCKER_REV",
    
    4058
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/i386-linux-alpine3_23:$DOCKER_REV",
    
    3994 4059
         "needs": [
    
    3995 4060
           {
    
    3996 4061
             "artifacts": false,
    
    ... ... @@ -4016,14 +4081,14 @@
    4016 4081
         ],
    
    4017 4082
         "variables": {
    
    4018 4083
           "BIGNUM_BACKEND": "gmp",
    
    4019
    -      "BIN_DIST_NAME": "ghc-i386-linux-alpine3_22-release+no_split_sections",
    
    4084
    +      "BIN_DIST_NAME": "ghc-i386-linux-alpine3_23-release+no_split_sections",
    
    4020 4085
           "BROKEN_TESTS": "encoding004 T10458 simd009 T25169",
    
    4021 4086
           "BUILD_FLAVOUR": "release+no_split_sections",
    
    4022 4087
           "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    4023 4088
           "IGNORE_PERF_FAILURES": "all",
    
    4024 4089
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    4025 4090
           "RUNTEST_ARGS": "",
    
    4026
    -      "TEST_ENV": "i386-linux-alpine3_22-release+no_split_sections",
    
    4091
    +      "TEST_ENV": "i386-linux-alpine3_23-release+no_split_sections",
    
    4027 4092
           "XZ_OPT": "-9"
    
    4028 4093
         }
    
    4029 4094
       },
    
    ... ... @@ -4423,7 +4488,7 @@
    4423 4488
           "XZ_OPT": "-9"
    
    4424 4489
         }
    
    4425 4490
       },
    
    4426
    -  "release-x86_64-linux-alpine3_22-release+no_split_sections": {
    
    4491
    +  "release-x86_64-linux-alpine3_23-release+no_split_sections": {
    
    4427 4492
         "after_script": [
    
    4428 4493
           ".gitlab/ci.sh save_cache",
    
    4429 4494
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -4434,7 +4499,7 @@
    4434 4499
         "artifacts": {
    
    4435 4500
           "expire_in": "1 year",
    
    4436 4501
           "paths": [
    
    4437
    -        "ghc-x86_64-linux-alpine3_22-release+no_split_sections.tar.xz",
    
    4502
    +        "ghc-x86_64-linux-alpine3_23-release+no_split_sections.tar.xz",
    
    4438 4503
             "junit.xml",
    
    4439 4504
             "unexpected-test-output.tar.gz"
    
    4440 4505
           ],
    
    ... ... @@ -4444,14 +4509,14 @@
    4444 4509
           "when": "always"
    
    4445 4510
         },
    
    4446 4511
         "cache": {
    
    4447
    -      "key": "x86_64-linux-alpine3_22-$CACHE_REV",
    
    4512
    +      "key": "x86_64-linux-alpine3_23-$CACHE_REV",
    
    4448 4513
           "paths": [
    
    4449 4514
             "cabal-cache",
    
    4450 4515
             "toolchain"
    
    4451 4516
           ]
    
    4452 4517
         },
    
    4453 4518
         "dependencies": [],
    
    4454
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22:$DOCKER_REV",
    
    4519
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23:$DOCKER_REV",
    
    4455 4520
         "needs": [
    
    4456 4521
           {
    
    4457 4522
             "artifacts": false,
    
    ... ... @@ -4477,14 +4542,14 @@
    4477 4542
         ],
    
    4478 4543
         "variables": {
    
    4479 4544
           "BIGNUM_BACKEND": "gmp",
    
    4480
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-release+no_split_sections",
    
    4545
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-release+no_split_sections",
    
    4481 4546
           "BROKEN_TESTS": "encoding004 T10458",
    
    4482 4547
           "BUILD_FLAVOUR": "release+no_split_sections",
    
    4483 4548
           "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    4484 4549
           "IGNORE_PERF_FAILURES": "all",
    
    4485 4550
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    4486 4551
           "RUNTEST_ARGS": "",
    
    4487
    -      "TEST_ENV": "x86_64-linux-alpine3_22-release+no_split_sections",
    
    4552
    +      "TEST_ENV": "x86_64-linux-alpine3_23-release+no_split_sections",
    
    4488 4553
           "XZ_OPT": "-9"
    
    4489 4554
         }
    
    4490 4555
       },
    
    ... ... @@ -4808,7 +4873,7 @@
    4808 4873
           "XZ_OPT": "-9"
    
    4809 4874
         }
    
    4810 4875
       },
    
    4811
    -  "release-x86_64-linux-fedora42-release": {
    
    4876
    +  "release-x86_64-linux-fedora43-release": {
    
    4812 4877
         "after_script": [
    
    4813 4878
           ".gitlab/ci.sh save_cache",
    
    4814 4879
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -4819,7 +4884,7 @@
    4819 4884
         "artifacts": {
    
    4820 4885
           "expire_in": "1 year",
    
    4821 4886
           "paths": [
    
    4822
    -        "ghc-x86_64-linux-fedora42-release.tar.xz",
    
    4887
    +        "ghc-x86_64-linux-fedora43-release.tar.xz",
    
    4823 4888
             "junit.xml",
    
    4824 4889
             "unexpected-test-output.tar.gz"
    
    4825 4890
           ],
    
    ... ... @@ -4829,14 +4894,14 @@
    4829 4894
           "when": "always"
    
    4830 4895
         },
    
    4831 4896
         "cache": {
    
    4832
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    4897
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    4833 4898
           "paths": [
    
    4834 4899
             "cabal-cache",
    
    4835 4900
             "toolchain"
    
    4836 4901
           ]
    
    4837 4902
         },
    
    4838 4903
         "dependencies": [],
    
    4839
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    4904
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    4840 4905
         "needs": [
    
    4841 4906
           {
    
    4842 4907
             "artifacts": false,
    
    ... ... @@ -4862,17 +4927,17 @@
    4862 4927
         ],
    
    4863 4928
         "variables": {
    
    4864 4929
           "BIGNUM_BACKEND": "gmp",
    
    4865
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release",
    
    4930
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
    
    4866 4931
           "BUILD_FLAVOUR": "release",
    
    4867 4932
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    4868 4933
           "IGNORE_PERF_FAILURES": "all",
    
    4869 4934
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    4870 4935
           "RUNTEST_ARGS": "",
    
    4871
    -      "TEST_ENV": "x86_64-linux-fedora42-release",
    
    4936
    +      "TEST_ENV": "x86_64-linux-fedora43-release",
    
    4872 4937
           "XZ_OPT": "-9"
    
    4873 4938
         }
    
    4874 4939
       },
    
    4875
    -  "release-x86_64-linux-fedora42-release+debug_info": {
    
    4940
    +  "release-x86_64-linux-fedora43-release+debug_info": {
    
    4876 4941
         "after_script": [
    
    4877 4942
           ".gitlab/ci.sh save_cache",
    
    4878 4943
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -4883,7 +4948,7 @@
    4883 4948
         "artifacts": {
    
    4884 4949
           "expire_in": "1 year",
    
    4885 4950
           "paths": [
    
    4886
    -        "ghc-x86_64-linux-fedora42-release+debug_info.tar.xz",
    
    4951
    +        "ghc-x86_64-linux-fedora43-release+debug_info.tar.xz",
    
    4887 4952
             "junit.xml",
    
    4888 4953
             "unexpected-test-output.tar.gz"
    
    4889 4954
           ],
    
    ... ... @@ -4893,14 +4958,14 @@
    4893 4958
           "when": "always"
    
    4894 4959
         },
    
    4895 4960
         "cache": {
    
    4896
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    4961
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    4897 4962
           "paths": [
    
    4898 4963
             "cabal-cache",
    
    4899 4964
             "toolchain"
    
    4900 4965
           ]
    
    4901 4966
         },
    
    4902 4967
         "dependencies": [],
    
    4903
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    4968
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    4904 4969
         "needs": [
    
    4905 4970
           {
    
    4906 4971
             "artifacts": false,
    
    ... ... @@ -4926,17 +4991,17 @@
    4926 4991
         ],
    
    4927 4992
         "variables": {
    
    4928 4993
           "BIGNUM_BACKEND": "gmp",
    
    4929
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release+debug_info",
    
    4994
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release+debug_info",
    
    4930 4995
           "BUILD_FLAVOUR": "release+debug_info",
    
    4931 4996
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    4932 4997
           "IGNORE_PERF_FAILURES": "all",
    
    4933 4998
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    4934 4999
           "RUNTEST_ARGS": "",
    
    4935
    -      "TEST_ENV": "x86_64-linux-fedora42-release+debug_info",
    
    5000
    +      "TEST_ENV": "x86_64-linux-fedora43-release+debug_info",
    
    4936 5001
           "XZ_OPT": "-9"
    
    4937 5002
         }
    
    4938 5003
       },
    
    4939
    -  "release-x86_64-linux-fedora42-release-hackage": {
    
    5004
    +  "release-x86_64-linux-fedora43-release-hackage": {
    
    4940 5005
         "after_script": [
    
    4941 5006
           ".gitlab/ci.sh save_cache",
    
    4942 5007
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -4947,7 +5012,7 @@
    4947 5012
         "artifacts": {
    
    4948 5013
           "expire_in": "1 year",
    
    4949 5014
           "paths": [
    
    4950
    -        "ghc-x86_64-linux-fedora42-release.tar.xz",
    
    5015
    +        "ghc-x86_64-linux-fedora43-release.tar.xz",
    
    4951 5016
             "junit.xml",
    
    4952 5017
             "unexpected-test-output.tar.gz"
    
    4953 5018
           ],
    
    ... ... @@ -4957,14 +5022,14 @@
    4957 5022
           "when": "always"
    
    4958 5023
         },
    
    4959 5024
         "cache": {
    
    4960
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    5025
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    4961 5026
           "paths": [
    
    4962 5027
             "cabal-cache",
    
    4963 5028
             "toolchain"
    
    4964 5029
           ]
    
    4965 5030
         },
    
    4966 5031
         "dependencies": [],
    
    4967
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    5032
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    4968 5033
         "needs": [
    
    4969 5034
           {
    
    4970 5035
             "artifacts": false,
    
    ... ... @@ -4990,14 +5055,14 @@
    4990 5055
         ],
    
    4991 5056
         "variables": {
    
    4992 5057
           "BIGNUM_BACKEND": "gmp",
    
    4993
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release",
    
    5058
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
    
    4994 5059
           "BUILD_FLAVOUR": "release",
    
    4995 5060
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    4996 5061
           "HADRIAN_ARGS": "--haddock-for-hackage",
    
    4997 5062
           "IGNORE_PERF_FAILURES": "all",
    
    4998 5063
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    4999 5064
           "RUNTEST_ARGS": "",
    
    5000
    -      "TEST_ENV": "x86_64-linux-fedora42-release",
    
    5065
    +      "TEST_ENV": "x86_64-linux-fedora43-release",
    
    5001 5066
           "XZ_OPT": "-9"
    
    5002 5067
         }
    
    5003 5068
       },
    
    ... ... @@ -5709,7 +5774,7 @@
    5709 5774
           "TEST_ENV": "x86_64-linux-alpine3_12-validate+fully_static"
    
    5710 5775
         }
    
    5711 5776
       },
    
    5712
    -  "x86_64-linux-alpine3_22-validate": {
    
    5777
    +  "x86_64-linux-alpine3_23-validate": {
    
    5713 5778
         "after_script": [
    
    5714 5779
           ".gitlab/ci.sh save_cache",
    
    5715 5780
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -5720,7 +5785,7 @@
    5720 5785
         "artifacts": {
    
    5721 5786
           "expire_in": "2 weeks",
    
    5722 5787
           "paths": [
    
    5723
    -        "ghc-x86_64-linux-alpine3_22-validate.tar.xz",
    
    5788
    +        "ghc-x86_64-linux-alpine3_23-validate.tar.xz",
    
    5724 5789
             "junit.xml",
    
    5725 5790
             "unexpected-test-output.tar.gz"
    
    5726 5791
           ],
    
    ... ... @@ -5730,14 +5795,14 @@
    5730 5795
           "when": "always"
    
    5731 5796
         },
    
    5732 5797
         "cache": {
    
    5733
    -      "key": "x86_64-linux-alpine3_22-$CACHE_REV",
    
    5798
    +      "key": "x86_64-linux-alpine3_23-$CACHE_REV",
    
    5734 5799
           "paths": [
    
    5735 5800
             "cabal-cache",
    
    5736 5801
             "toolchain"
    
    5737 5802
           ]
    
    5738 5803
         },
    
    5739 5804
         "dependencies": [],
    
    5740
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22:$DOCKER_REV",
    
    5805
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23:$DOCKER_REV",
    
    5741 5806
         "needs": [
    
    5742 5807
           {
    
    5743 5808
             "artifacts": false,
    
    ... ... @@ -5746,7 +5811,7 @@
    5746 5811
         ],
    
    5747 5812
         "rules": [
    
    5748 5813
           {
    
    5749
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_22-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5814
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_23-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5750 5815
             "when": "on_success"
    
    5751 5816
           }
    
    5752 5817
         ],
    
    ... ... @@ -5763,16 +5828,16 @@
    5763 5828
         ],
    
    5764 5829
         "variables": {
    
    5765 5830
           "BIGNUM_BACKEND": "gmp",
    
    5766
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-validate",
    
    5831
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-validate",
    
    5767 5832
           "BROKEN_TESTS": "encoding004 T10458",
    
    5768 5833
           "BUILD_FLAVOUR": "validate",
    
    5769 5834
           "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    5770 5835
           "INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
    
    5771 5836
           "RUNTEST_ARGS": "",
    
    5772
    -      "TEST_ENV": "x86_64-linux-alpine3_22-validate"
    
    5837
    +      "TEST_ENV": "x86_64-linux-alpine3_23-validate"
    
    5773 5838
         }
    
    5774 5839
       },
    
    5775
    -  "x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    5840
    +  "x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    5776 5841
         "after_script": [
    
    5777 5842
           ".gitlab/ci.sh save_cache",
    
    5778 5843
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -5783,7 +5848,7 @@
    5783 5848
         "artifacts": {
    
    5784 5849
           "expire_in": "2 weeks",
    
    5785 5850
           "paths": [
    
    5786
    -        "ghc-x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    5851
    +        "ghc-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    5787 5852
             "junit.xml",
    
    5788 5853
             "unexpected-test-output.tar.gz"
    
    5789 5854
           ],
    
    ... ... @@ -5793,14 +5858,14 @@
    5793 5858
           "when": "always"
    
    5794 5859
         },
    
    5795 5860
         "cache": {
    
    5796
    -      "key": "x86_64-linux-alpine3_22-wasm-$CACHE_REV",
    
    5861
    +      "key": "x86_64-linux-alpine3_23-wasm-$CACHE_REV",
    
    5797 5862
           "paths": [
    
    5798 5863
             "cabal-cache",
    
    5799 5864
             "toolchain"
    
    5800 5865
           ]
    
    5801 5866
         },
    
    5802 5867
         "dependencies": [],
    
    5803
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22-wasm:$DOCKER_REV",
    
    5868
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23-wasm:$DOCKER_REV",
    
    5804 5869
         "needs": [
    
    5805 5870
           {
    
    5806 5871
             "artifacts": false,
    
    ... ... @@ -5809,7 +5874,7 @@
    5809 5874
         ],
    
    5810 5875
         "rules": [
    
    5811 5876
           {
    
    5812
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release\\+host_fully_static\\+text_simdutf(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*wasm.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5877
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release\\+host_fully_static\\+text_simdutf(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*wasm.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5813 5878
             "when": "on_success"
    
    5814 5879
           }
    
    5815 5880
         ],
    
    ... ... @@ -5826,17 +5891,17 @@
    5826 5891
         ],
    
    5827 5892
         "variables": {
    
    5828 5893
           "BIGNUM_BACKEND": "gmp",
    
    5829
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    5894
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    5830 5895
           "BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
    
    5831 5896
           "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
    
    5832 5897
           "CROSS_TARGET": "wasm32-wasi",
    
    5833 5898
           "FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
    
    5834 5899
           "HADRIAN_ARGS": "--docs=no-sphinx-pdfs --docs=no-sphinx-man",
    
    5835 5900
           "RUNTEST_ARGS": "",
    
    5836
    -      "TEST_ENV": "x86_64-linux-alpine3_22-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    5901
    +      "TEST_ENV": "x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    5837 5902
         }
    
    5838 5903
       },
    
    5839
    -  "x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    5904
    +  "x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    5840 5905
         "after_script": [
    
    5841 5906
           ".gitlab/ci.sh save_cache",
    
    5842 5907
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -5847,7 +5912,7 @@
    5847 5912
         "artifacts": {
    
    5848 5913
           "expire_in": "2 weeks",
    
    5849 5914
           "paths": [
    
    5850
    -        "ghc-x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    5915
    +        "ghc-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    5851 5916
             "junit.xml",
    
    5852 5917
             "unexpected-test-output.tar.gz"
    
    5853 5918
           ],
    
    ... ... @@ -5857,14 +5922,14 @@
    5857 5922
           "when": "always"
    
    5858 5923
         },
    
    5859 5924
         "cache": {
    
    5860
    -      "key": "x86_64-linux-alpine3_22-wasm-$CACHE_REV",
    
    5925
    +      "key": "x86_64-linux-alpine3_23-wasm-$CACHE_REV",
    
    5861 5926
           "paths": [
    
    5862 5927
             "cabal-cache",
    
    5863 5928
             "toolchain"
    
    5864 5929
           ]
    
    5865 5930
         },
    
    5866 5931
         "dependencies": [],
    
    5867
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22-wasm:$DOCKER_REV",
    
    5932
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23-wasm:$DOCKER_REV",
    
    5868 5933
         "needs": [
    
    5869 5934
           {
    
    5870 5935
             "artifacts": false,
    
    ... ... @@ -5874,7 +5939,7 @@
    5874 5939
         "rules": [
    
    5875 5940
           {
    
    5876 5941
             "allow_failure": true,
    
    5877
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release\\+host_fully_static\\+text_simdutf(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*wasm.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5942
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release\\+host_fully_static\\+text_simdutf(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*wasm.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5878 5943
             "when": "manual"
    
    5879 5944
           }
    
    5880 5945
         ],
    
    ... ... @@ -5891,17 +5956,17 @@
    5891 5956
         ],
    
    5892 5957
         "variables": {
    
    5893 5958
           "BIGNUM_BACKEND": "native",
    
    5894
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    5959
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    5895 5960
           "BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
    
    5896 5961
           "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
    
    5897 5962
           "CROSS_TARGET": "wasm32-wasi",
    
    5898 5963
           "FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
    
    5899 5964
           "HADRIAN_ARGS": "--docs=no-sphinx-pdfs --docs=no-sphinx-man",
    
    5900 5965
           "RUNTEST_ARGS": "",
    
    5901
    -      "TEST_ENV": "x86_64-linux-alpine3_22-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    5966
    +      "TEST_ENV": "x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    5902 5967
         }
    
    5903 5968
       },
    
    5904
    -  "x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    5969
    +  "x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf": {
    
    5905 5970
         "after_script": [
    
    5906 5971
           ".gitlab/ci.sh save_cache",
    
    5907 5972
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -5912,7 +5977,7 @@
    5912 5977
         "artifacts": {
    
    5913 5978
           "expire_in": "2 weeks",
    
    5914 5979
           "paths": [
    
    5915
    -        "ghc-x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    5980
    +        "ghc-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf.tar.xz",
    
    5916 5981
             "junit.xml",
    
    5917 5982
             "unexpected-test-output.tar.gz"
    
    5918 5983
           ],
    
    ... ... @@ -5922,14 +5987,14 @@
    5922 5987
           "when": "always"
    
    5923 5988
         },
    
    5924 5989
         "cache": {
    
    5925
    -      "key": "x86_64-linux-alpine3_22-wasm-$CACHE_REV",
    
    5990
    +      "key": "x86_64-linux-alpine3_23-wasm-$CACHE_REV",
    
    5926 5991
           "paths": [
    
    5927 5992
             "cabal-cache",
    
    5928 5993
             "toolchain"
    
    5929 5994
           ]
    
    5930 5995
         },
    
    5931 5996
         "dependencies": [],
    
    5932
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_22-wasm:$DOCKER_REV",
    
    5997
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-alpine3_23-wasm:$DOCKER_REV",
    
    5933 5998
         "needs": [
    
    5934 5999
           {
    
    5935 6000
             "artifacts": false,
    
    ... ... @@ -5939,7 +6004,7 @@
    5939 6004
         "rules": [
    
    5940 6005
           {
    
    5941 6006
             "allow_failure": true,
    
    5942
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release\\+host_fully_static\\+text_simdutf(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*wasm.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    6007
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release\\+host_fully_static\\+text_simdutf(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/)) || ($CI_MERGE_REQUEST_LABELS =~ /.*wasm.*/)))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    5943 6008
             "when": "manual"
    
    5944 6009
           }
    
    5945 6010
         ],
    
    ... ... @@ -5956,14 +6021,14 @@
    5956 6021
         ],
    
    5957 6022
         "variables": {
    
    5958 6023
           "BIGNUM_BACKEND": "gmp",
    
    5959
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    6024
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
    
    5960 6025
           "BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
    
    5961 6026
           "CONFIGURE_ARGS": "--enable-unregisterised --with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
    
    5962 6027
           "CROSS_TARGET": "wasm32-wasi",
    
    5963 6028
           "FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
    
    5964 6029
           "HADRIAN_ARGS": "--docs=no-sphinx-pdfs --docs=no-sphinx-man",
    
    5965 6030
           "RUNTEST_ARGS": "",
    
    5966
    -      "TEST_ENV": "x86_64-linux-alpine3_22-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    6031
    +      "TEST_ENV": "x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf"
    
    5967 6032
         }
    
    5968 6033
       },
    
    5969 6034
       "x86_64-linux-deb10-validate": {
    
    ... ... @@ -7032,7 +7097,7 @@
    7032 7097
           "TEST_ENV": "x86_64-linux-deb9-validate"
    
    7033 7098
         }
    
    7034 7099
       },
    
    7035
    -  "x86_64-linux-fedora42-release": {
    
    7100
    +  "x86_64-linux-fedora43-release": {
    
    7036 7101
         "after_script": [
    
    7037 7102
           ".gitlab/ci.sh save_cache",
    
    7038 7103
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -7043,7 +7108,7 @@
    7043 7108
         "artifacts": {
    
    7044 7109
           "expire_in": "2 weeks",
    
    7045 7110
           "paths": [
    
    7046
    -        "ghc-x86_64-linux-fedora42-release.tar.xz",
    
    7111
    +        "ghc-x86_64-linux-fedora43-release.tar.xz",
    
    7047 7112
             "junit.xml",
    
    7048 7113
             "unexpected-test-output.tar.gz"
    
    7049 7114
           ],
    
    ... ... @@ -7053,14 +7118,14 @@
    7053 7118
           "when": "always"
    
    7054 7119
         },
    
    7055 7120
         "cache": {
    
    7056
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    7121
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    7057 7122
           "paths": [
    
    7058 7123
             "cabal-cache",
    
    7059 7124
             "toolchain"
    
    7060 7125
           ]
    
    7061 7126
         },
    
    7062 7127
         "dependencies": [],
    
    7063
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    7128
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    7064 7129
         "needs": [
    
    7065 7130
           {
    
    7066 7131
             "artifacts": false,
    
    ... ... @@ -7069,7 +7134,7 @@
    7069 7134
         ],
    
    7070 7135
         "rules": [
    
    7071 7136
           {
    
    7072
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora42-release(\\s|$).*/)) || (($ONLY_JOBS == null) && ((\"true\" == \"true\")))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7137
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora43-release(\\s|$).*/)) || (($ONLY_JOBS == null) && ((\"true\" == \"true\")))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7073 7138
             "when": "on_success"
    
    7074 7139
           }
    
    7075 7140
         ],
    
    ... ... @@ -7086,15 +7151,15 @@
    7086 7151
         ],
    
    7087 7152
         "variables": {
    
    7088 7153
           "BIGNUM_BACKEND": "gmp",
    
    7089
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release",
    
    7154
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
    
    7090 7155
           "BUILD_FLAVOUR": "release",
    
    7091 7156
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7092 7157
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7093 7158
           "RUNTEST_ARGS": "",
    
    7094
    -      "TEST_ENV": "x86_64-linux-fedora42-release"
    
    7159
    +      "TEST_ENV": "x86_64-linux-fedora43-release"
    
    7095 7160
         }
    
    7096 7161
       },
    
    7097
    -  "x86_64-linux-fedora42-release-hackage": {
    
    7162
    +  "x86_64-linux-fedora43-release-hackage": {
    
    7098 7163
         "after_script": [
    
    7099 7164
           ".gitlab/ci.sh save_cache",
    
    7100 7165
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -7105,7 +7170,7 @@
    7105 7170
         "artifacts": {
    
    7106 7171
           "expire_in": "2 weeks",
    
    7107 7172
           "paths": [
    
    7108
    -        "ghc-x86_64-linux-fedora42-release.tar.xz",
    
    7173
    +        "ghc-x86_64-linux-fedora43-release.tar.xz",
    
    7109 7174
             "junit.xml",
    
    7110 7175
             "unexpected-test-output.tar.gz"
    
    7111 7176
           ],
    
    ... ... @@ -7115,14 +7180,14 @@
    7115 7180
           "when": "always"
    
    7116 7181
         },
    
    7117 7182
         "cache": {
    
    7118
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    7183
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    7119 7184
           "paths": [
    
    7120 7185
             "cabal-cache",
    
    7121 7186
             "toolchain"
    
    7122 7187
           ]
    
    7123 7188
         },
    
    7124 7189
         "dependencies": [],
    
    7125
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    7190
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    7126 7191
         "needs": [
    
    7127 7192
           {
    
    7128 7193
             "artifacts": false,
    
    ... ... @@ -7131,7 +7196,7 @@
    7131 7196
         ],
    
    7132 7197
         "rules": [
    
    7133 7198
           {
    
    7134
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora42-release(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7199
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora43-release(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7135 7200
             "when": "on_success"
    
    7136 7201
           }
    
    7137 7202
         ],
    
    ... ... @@ -7148,16 +7213,16 @@
    7148 7213
         ],
    
    7149 7214
         "variables": {
    
    7150 7215
           "BIGNUM_BACKEND": "gmp",
    
    7151
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-release",
    
    7216
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
    
    7152 7217
           "BUILD_FLAVOUR": "release",
    
    7153 7218
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7154 7219
           "HADRIAN_ARGS": "--haddock-for-hackage",
    
    7155 7220
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7156 7221
           "RUNTEST_ARGS": "",
    
    7157
    -      "TEST_ENV": "x86_64-linux-fedora42-release"
    
    7222
    +      "TEST_ENV": "x86_64-linux-fedora43-release"
    
    7158 7223
         }
    
    7159 7224
       },
    
    7160
    -  "x86_64-linux-fedora42-validate": {
    
    7225
    +  "x86_64-linux-fedora43-validate": {
    
    7161 7226
         "after_script": [
    
    7162 7227
           ".gitlab/ci.sh save_cache",
    
    7163 7228
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -7168,7 +7233,7 @@
    7168 7233
         "artifacts": {
    
    7169 7234
           "expire_in": "2 weeks",
    
    7170 7235
           "paths": [
    
    7171
    -        "ghc-x86_64-linux-fedora42-validate.tar.xz",
    
    7236
    +        "ghc-x86_64-linux-fedora43-validate.tar.xz",
    
    7172 7237
             "junit.xml",
    
    7173 7238
             "unexpected-test-output.tar.gz"
    
    7174 7239
           ],
    
    ... ... @@ -7178,14 +7243,14 @@
    7178 7243
           "when": "always"
    
    7179 7244
         },
    
    7180 7245
         "cache": {
    
    7181
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    7246
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    7182 7247
           "paths": [
    
    7183 7248
             "cabal-cache",
    
    7184 7249
             "toolchain"
    
    7185 7250
           ]
    
    7186 7251
         },
    
    7187 7252
         "dependencies": [],
    
    7188
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    7253
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    7189 7254
         "needs": [
    
    7190 7255
           {
    
    7191 7256
             "artifacts": false,
    
    ... ... @@ -7194,7 +7259,7 @@
    7194 7259
         ],
    
    7195 7260
         "rules": [
    
    7196 7261
           {
    
    7197
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora42-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7262
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora43-validate(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7198 7263
             "when": "on_success"
    
    7199 7264
           }
    
    7200 7265
         ],
    
    ... ... @@ -7211,15 +7276,15 @@
    7211 7276
         ],
    
    7212 7277
         "variables": {
    
    7213 7278
           "BIGNUM_BACKEND": "gmp",
    
    7214
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-validate",
    
    7279
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate",
    
    7215 7280
           "BUILD_FLAVOUR": "validate",
    
    7216 7281
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7217 7282
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7218 7283
           "RUNTEST_ARGS": "",
    
    7219
    -      "TEST_ENV": "x86_64-linux-fedora42-validate"
    
    7284
    +      "TEST_ENV": "x86_64-linux-fedora43-validate"
    
    7220 7285
         }
    
    7221 7286
       },
    
    7222
    -  "x86_64-linux-fedora42-validate+debug_info": {
    
    7287
    +  "x86_64-linux-fedora43-validate+debug_info": {
    
    7223 7288
         "after_script": [
    
    7224 7289
           ".gitlab/ci.sh save_cache",
    
    7225 7290
           ".gitlab/ci.sh save_test_output",
    
    ... ... @@ -7230,7 +7295,7 @@
    7230 7295
         "artifacts": {
    
    7231 7296
           "expire_in": "2 weeks",
    
    7232 7297
           "paths": [
    
    7233
    -        "ghc-x86_64-linux-fedora42-validate+debug_info.tar.xz",
    
    7298
    +        "ghc-x86_64-linux-fedora43-validate+debug_info.tar.xz",
    
    7234 7299
             "junit.xml",
    
    7235 7300
             "unexpected-test-output.tar.gz"
    
    7236 7301
           ],
    
    ... ... @@ -7240,14 +7305,14 @@
    7240 7305
           "when": "always"
    
    7241 7306
         },
    
    7242 7307
         "cache": {
    
    7243
    -      "key": "x86_64-linux-fedora42-$CACHE_REV",
    
    7308
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    7244 7309
           "paths": [
    
    7245 7310
             "cabal-cache",
    
    7246 7311
             "toolchain"
    
    7247 7312
           ]
    
    7248 7313
         },
    
    7249 7314
         "dependencies": [],
    
    7250
    -    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora42:$DOCKER_REV",
    
    7315
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    7251 7316
         "needs": [
    
    7252 7317
           {
    
    7253 7318
             "artifacts": false,
    
    ... ... @@ -7256,7 +7321,7 @@
    7256 7321
         ],
    
    7257 7322
         "rules": [
    
    7258 7323
           {
    
    7259
    -        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora42-validate\\+debug_info(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7324
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora43-validate\\+debug_info(\\s|$).*/)) || (($ONLY_JOBS == null) && (\"disabled\" != \"disabled\"))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7260 7325
             "when": "on_success"
    
    7261 7326
           }
    
    7262 7327
         ],
    
    ... ... @@ -7273,12 +7338,76 @@
    7273 7338
         ],
    
    7274 7339
         "variables": {
    
    7275 7340
           "BIGNUM_BACKEND": "gmp",
    
    7276
    -      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora42-validate+debug_info",
    
    7341
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info",
    
    7277 7342
           "BUILD_FLAVOUR": "validate+debug_info",
    
    7278 7343
           "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7279 7344
           "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7280 7345
           "RUNTEST_ARGS": "",
    
    7281
    -      "TEST_ENV": "x86_64-linux-fedora42-validate+debug_info"
    
    7346
    +      "TEST_ENV": "x86_64-linux-fedora43-validate+debug_info"
    
    7347
    +    }
    
    7348
    +  },
    
    7349
    +  "x86_64-linux-fedora43-validate+debug_info+ubsan": {
    
    7350
    +    "after_script": [
    
    7351
    +      ".gitlab/ci.sh save_cache",
    
    7352
    +      ".gitlab/ci.sh save_test_output",
    
    7353
    +      ".gitlab/ci.sh clean",
    
    7354
    +      "cat ci_timings.txt"
    
    7355
    +    ],
    
    7356
    +    "allow_failure": false,
    
    7357
    +    "artifacts": {
    
    7358
    +      "expire_in": "2 weeks",
    
    7359
    +      "paths": [
    
    7360
    +        "ghc-x86_64-linux-fedora43-validate+debug_info+ubsan.tar.xz",
    
    7361
    +        "junit.xml",
    
    7362
    +        "unexpected-test-output.tar.gz"
    
    7363
    +      ],
    
    7364
    +      "reports": {
    
    7365
    +        "junit": "junit.xml"
    
    7366
    +      },
    
    7367
    +      "when": "always"
    
    7368
    +    },
    
    7369
    +    "cache": {
    
    7370
    +      "key": "x86_64-linux-fedora43-$CACHE_REV",
    
    7371
    +      "paths": [
    
    7372
    +        "cabal-cache",
    
    7373
    +        "toolchain"
    
    7374
    +      ]
    
    7375
    +    },
    
    7376
    +    "dependencies": [],
    
    7377
    +    "image": "registry.gitlab.haskell.org/ghc/ci-images/x86_64-linux-fedora43:$DOCKER_REV",
    
    7378
    +    "needs": [
    
    7379
    +      {
    
    7380
    +        "artifacts": false,
    
    7381
    +        "job": "hadrian-ghc-in-ghci"
    
    7382
    +      }
    
    7383
    +    ],
    
    7384
    +    "rules": [
    
    7385
    +      {
    
    7386
    +        "if": "((($ONLY_JOBS) && ($ONLY_JOBS =~ /.*\\bx86_64-linux-fedora43-validate\\+debug_info\\+ubsan(\\s|$).*/)) || (($ONLY_JOBS == null) && ((($CI_MERGE_REQUEST_LABELS =~ /.*full-ci.*/) || ($CI_MERGE_REQUEST_LABELS =~ /.*marge_bot_batch_merge_job.*/) || ($CI_COMMIT_BRANCH == \"master\") || ($CI_COMMIT_BRANCH =~ /ghc-[0-9]+\\.[0-9]+/))))) && ($RELEASE_JOB != \"yes\") && ($NIGHTLY == null)",
    
    7387
    +        "when": "on_success"
    
    7388
    +      }
    
    7389
    +    ],
    
    7390
    +    "script": [
    
    7391
    +      "sudo chown ghc:ghc -R .",
    
    7392
    +      ".gitlab/ci.sh setup",
    
    7393
    +      ".gitlab/ci.sh configure",
    
    7394
    +      ".gitlab/ci.sh build_hadrian",
    
    7395
    +      ".gitlab/ci.sh test_hadrian"
    
    7396
    +    ],
    
    7397
    +    "stage": "full-build",
    
    7398
    +    "tags": [
    
    7399
    +      "x86_64-linux"
    
    7400
    +    ],
    
    7401
    +    "variables": {
    
    7402
    +      "BIGNUM_BACKEND": "gmp",
    
    7403
    +      "BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info+ubsan",
    
    7404
    +      "BUILD_FLAVOUR": "validate+debug_info+ubsan",
    
    7405
    +      "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7406
    +      "HADRIAN_ARGS": "--docs=none",
    
    7407
    +      "INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
    
    7408
    +      "RUNTEST_ARGS": "",
    
    7409
    +      "TEST_ENV": "x86_64-linux-fedora43-validate+debug_info+ubsan",
    
    7410
    +      "UBSAN_OPTIONS": "suppressions=$CI_PROJECT_DIR/rts/.ubsan-suppressions"
    
    7282 7411
         }
    
    7283 7412
       },
    
    7284 7413
       "x86_64-linux-rocky8-validate": {
    

  • .gitlab/rel_eng/fetch-gitlab-artifacts/fetch_gitlab.py
    ... ... @@ -23,26 +23,26 @@ def job_triple(job_name):
    23 23
             'release-x86_64-linux-ubuntu22_04-release': 'x86_64-ubuntu22_04-linux',
    
    24 24
             'release-x86_64-linux-ubuntu20_04-release': 'x86_64-ubuntu20_04-linux',
    
    25 25
             'release-x86_64-linux-ubuntu18_04-release': 'x86_64-ubuntu18_04-linux',
    
    26
    -        'release-x86_64-linux-fedora42-release': 'x86_64-fedora42-linux',
    
    27
    -        'release-x86_64-linux-fedora42-release+debug_info': 'x86_64-fedora42-linux-dwarf',
    
    26
    +        'release-x86_64-linux-fedora43-release': 'x86_64-fedora43-linux',
    
    27
    +        'release-x86_64-linux-fedora43-release+debug_info': 'x86_64-fedora43-linux-dwarf',
    
    28 28
             'release-x86_64-linux-deb12-release': 'x86_64-deb12-linux',
    
    29 29
             'release-x86_64-linux-deb11-release': 'x86_64-deb11-linux',
    
    30 30
             'release-x86_64-linux-deb10-release+debug_info': 'x86_64-deb10-linux-dwarf',
    
    31 31
             'release-x86_64-linux-deb10-release': 'x86_64-deb10-linux',
    
    32 32
             'release-x86_64-linux-deb9-release': 'x86_64-deb9-linux',
    
    33 33
             'release-x86_64-linux-alpine3_12-release+fully_static+no_split_sections': 'x86_64-alpine3_12-linux-static',
    
    34
    -        'release-x86_64-linux-alpine3_22-release+no_split_sections': 'x86_64-alpine3_22-linux',
    
    34
    +        'release-x86_64-linux-alpine3_23-release+no_split_sections': 'x86_64-alpine3_23-linux',
    
    35 35
             'release-x86_64-linux-alpine3_12-int_native-release+fully_static': 'x86_64-alpine3_12-linux-static-int_native',
    
    36 36
             'release-x86_64-darwin-release': 'x86_64-apple-darwin',
    
    37 37
             'release-i386-linux-deb12-release': 'i386-deb12-linux',
    
    38 38
             'release-i386-linux-deb10-release': 'i386-deb10-linux',
    
    39 39
             'release-i386-linux-deb9-release': 'i386-deb9-linux',
    
    40
    -        'release-i386-linux-alpine3_22-release+no_split_sections': 'i386-alpine3_22-linux',
    
    40
    +        'release-i386-linux-alpine3_23-release+no_split_sections': 'i386-alpine3_23-linux',
    
    41 41
             'release-armv7-linux-deb10-release': 'armv7-deb10-linux',
    
    42 42
             'release-aarch64-linux-deb10-release': 'aarch64-deb10-linux',
    
    43 43
             'release-aarch64-linux-deb11-release': 'aarch64-deb11-linux',
    
    44 44
             'release-aarch64-linux-deb12-release': 'aarch64-deb12-linux',
    
    45
    -        'release-aarch64-linux-alpine3_22-release+no_split_sections': 'aarch64-alpine3_22-linux',
    
    45
    +        'release-aarch64-linux-alpine3_23-release+no_split_sections': 'aarch64-alpine3_23-linux',
    
    46 46
             'release-aarch64-darwin-release': 'aarch64-apple-darwin',
    
    47 47
     
    
    48 48
             'source-tarball': 'src',
    

  • .gitlab/rel_eng/mk-ghcup-metadata/mk_ghcup_metadata.py
    ... ... @@ -200,13 +200,13 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map):
    200 200
         ubuntu2204 = mk(ubuntu("22_04"))
    
    201 201
         ubuntu2404 = mk(ubuntu("24_04"))
    
    202 202
         rocky8 = mk(rocky("8"))
    
    203
    -    fedora42 = mk(fedora(42))
    
    203
    +    fedora43 = mk(fedora(43))
    
    204 204
         darwin_x86 = mk(darwin("x86_64"))
    
    205 205
         darwin_arm64 = mk(darwin("aarch64"))
    
    206 206
         windows = mk(windowsArtifact)
    
    207
    -    alpine3_22 = mk(alpine("3_22"))
    
    208
    -    alpine3_22_arm64 = mk(alpine("3_22", arch='aarch64'))
    
    209
    -    alpine3_22_i386 = mk(alpine("3_22", arch='i386'))
    
    207
    +    alpine3_23 = mk(alpine("3_23"))
    
    208
    +    alpine3_23_arm64 = mk(alpine("3_23", arch='aarch64'))
    
    209
    +    alpine3_23_i386 = mk(alpine("3_23", arch='i386'))
    
    210 210
         deb9 = mk(debian(9, "x86_64"))
    
    211 211
         deb10 = mk(debian(10, "x86_64"))
    
    212 212
         deb11 = mk(debian(11, "x86_64"))
    
    ... ... @@ -239,13 +239,13 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map):
    239 239
                                  , "unknown_versioning": ubuntu2004 }
    
    240 240
               , "Linux_CentOS"  : { "( >= 8 && < 9 )" : rocky8
    
    241 241
                                   , "unknown_versioning" : rocky8  }
    
    242
    -          , "Linux_Fedora"  : { ">= 42": fedora42
    
    242
    +          , "Linux_Fedora"  : { ">= 43": fedora43
    
    243 243
                                   , "unknown_versioning": rocky8 }
    
    244 244
               , "Linux_RedHat"  : { "unknown_versioning": rocky8 }
    
    245 245
               , "Linux_UnknownLinux" : { "unknown_versioning": rocky8 }
    
    246 246
               , "Darwin" : { "unknown_versioning" : darwin_x86 }
    
    247 247
               , "Windows" : { "unknown_versioning" :  windows }
    
    248
    -          , "Linux_Alpine" : { "unknown_versioning": alpine3_22 }
    
    248
    +          , "Linux_Alpine" : { "unknown_versioning": alpine3_23 }
    
    249 249
               }
    
    250 250
     
    
    251 251
         a32 = { "Linux_Debian": { "( >= 10 && < 12 )": deb10_i386
    
    ... ... @@ -253,12 +253,12 @@ def mk_new_yaml(release_mode, version, date, pipeline_type, job_map):
    253 253
                                 , "unknown_versioning": deb10_i386 }
    
    254 254
               , "Linux_Ubuntu": { "unknown_versioning": deb10_i386 }
    
    255 255
               , "Linux_Mint" : { "unknown_versioning": deb10_i386 }
    
    256
    -          , "Linux_Alpine" : { "unknown_versioning": alpine3_22_i386 }
    
    256
    +          , "Linux_Alpine" : { "unknown_versioning": alpine3_23_i386 }
    
    257 257
               , "Linux_UnknownLinux" : { "unknown_versioning": deb10_i386 }
    
    258 258
               }
    
    259 259
     
    
    260 260
         arm64 = { "Linux_UnknownLinux": { "unknown_versioning": deb10_arm64 }
    
    261
    -            , "Linux_Alpine" : { "unknown_versioning": alpine3_22_arm64 }
    
    261
    +            , "Linux_Alpine" : { "unknown_versioning": alpine3_23_arm64 }
    
    262 262
                 , "Linux_Debian": { "( >= 10 && < 12 )": deb10_arm64
    
    263 263
                                   , "( >= 12 )": deb12_arm64
    
    264 264
                                   , "unknown_versioning": deb10_arm64
    

  • configure.ac
    ... ... @@ -526,7 +526,7 @@ AC_SUBST(InstallNameToolCmd)
    526 526
     # versions of LLVM simultaneously, but that stopped working around
    
    527 527
     # 3.5/3.6 release of LLVM.
    
    528 528
     LlvmMinVersion=13  # inclusive
    
    529
    -LlvmMaxVersion=21  # not inclusive
    
    529
    +LlvmMaxVersion=22  # not inclusive
    
    530 530
     AC_SUBST([LlvmMinVersion])
    
    531 531
     AC_SUBST([LlvmMaxVersion])
    
    532 532
     
    

  • hadrian/doc/flavours.md
    ... ... @@ -238,6 +238,10 @@ The supported transformers are listed below:
    238 238
             <td><code>thread_sanitizer</code></td>
    
    239 239
             <td>Build the runtime system with ThreadSanitizer support</td>
    
    240 240
         </tr>
    
    241
    +    <tr>
    
    242
    +        <td><code>ubsan</code></td>
    
    243
    +        <td>Build all stage1+ C/C++ code with UndefinedBehaviorSanitizer support</td>
    
    244
    +    </tr>
    
    241 245
         <tr>
    
    242 246
             <td><code>llvm</code></td>
    
    243 247
             <td>Use GHC's LLVM backend (`-fllvm`) for all stage1+ compilation.</td>
    

  • hadrian/src/Flavour.hs
    ... ... @@ -7,6 +7,7 @@ module Flavour
    7 7
       , addArgs
    
    8 8
       , splitSections
    
    9 9
       , enableThreadSanitizer
    
    10
    +  , enableUBSan
    
    10 11
       , enableLateCCS
    
    11 12
       , enableHashUnitIds
    
    12 13
       , enableDebugInfo, enableTickyGhc
    
    ... ... @@ -33,6 +34,9 @@ import Data.Either
    33 34
     import Data.Map (Map)
    
    34 35
     import qualified Data.Map as M
    
    35 36
     import qualified Data.Set as Set
    
    37
    +import GHC.Platform.ArchOS
    
    38
    +import Oracles.Flag
    
    39
    +import Oracles.Setting
    
    36 40
     import Packages
    
    37 41
     import Flavour.Type
    
    38 42
     import Settings.Parser
    
    ... ... @@ -53,6 +57,7 @@ flavourTransformers = M.fromList
    53 57
         , "no_split_sections" =: noSplitSections
    
    54 58
         , "thread_sanitizer" =: enableThreadSanitizer False
    
    55 59
         , "thread_sanitizer_cmm" =: enableThreadSanitizer True
    
    60
    +    , "ubsan"            =: enableUBSan
    
    56 61
         , "llvm"             =: viaLlvmBackend
    
    57 62
         , "profiled_ghc"     =: enableProfiledGhc
    
    58 63
         , "no_dynamic_ghc"   =: disableDynamicGhcPrograms
    
    ... ... @@ -258,6 +263,51 @@ enableThreadSanitizer instrumentCmm = addArgs $ notStage0 ? mconcat
    258 263
             ]
    
    259 264
         ]
    
    260 265
     
    
    266
    +-- | Whether or not -shared-libsan should be passed to clang at
    
    267
    +-- link-time.
    
    268
    +--
    
    269
    +-- See
    
    270
    +-- https://github.com/llvm/llvm-project/blob/llvmorg-21.1.7/clang/lib/Driver/SanitizerArgs.cpp#L1008,
    
    271
    +-- clang defaults to -shared-libsan on darwin/windows and
    
    272
    +-- -static-libsan on linux. In general, -static-libsan is incredibly
    
    273
    +-- problematic when multiple copies of the sanitizer runtimes coexist
    
    274
    +-- in the same address space due to being linked into multiple Haskell
    
    275
    +-- libraries. So we should explicitly specify `-shared-libsan` if
    
    276
    +-- needed.
    
    277
    +--
    
    278
    +-- A small downside of -shared-libsan is the clang-specific sanitizer
    
    279
    +-- runtime shared library path needs to be manually specified via
    
    280
    +-- @export LD_LIBRARY_PATH=$(dirname $(clang -print-libgcc-file-name -rtlib=compiler-rt))@
    
    281
    +-- for ld.so to find it at runtime.
    
    282
    +needSharedLibSAN :: Action Bool
    
    283
    +needSharedLibSAN = do
    
    284
    +  is_clang <- flag CcLlvmBackend
    
    285
    +  is_default_shared_libsan <- anyTargetOs [OSDarwin, OSMinGW32]
    
    286
    +  pure $ is_clang && not is_default_shared_libsan
    
    287
    +
    
    288
    +-- | Build all stage1+ C/C++ code with UndefinedBehaviorSanitizer
    
    289
    +-- support:
    
    290
    +-- https://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html
    
    291
    +enableUBSan :: Flavour -> Flavour
    
    292
    +enableUBSan =
    
    293
    +  addArgs $
    
    294
    +    notStage0
    
    295
    +      ? mconcat
    
    296
    +        [ package rts
    
    297
    +            ? builder (Cabal Flags)
    
    298
    +            ? arg "+ubsan"
    
    299
    +            <> (needSharedLibSAN ? arg "+shared-libsan"),
    
    300
    +          builder (Ghc CompileHs) ? arg "-optc-fsanitize=undefined",
    
    301
    +          builder (Ghc CompileCWithGhc) ? arg "-optc-fsanitize=undefined",
    
    302
    +          builder (Ghc CompileCppWithGhc) ? arg "-optcxx-fsanitize=undefined",
    
    303
    +          builder (Ghc LinkHs)
    
    304
    +            ? arg "-optc-fsanitize=undefined"
    
    305
    +            <> arg "-optl-fsanitize=undefined"
    
    306
    +            <> (needSharedLibSAN ? arg "-optl-shared-libsan"),
    
    307
    +          builder (Cc CompileC) ? arg "-fsanitize=undefined",
    
    308
    +          builder Testsuite ? arg "--config=have_ubsan=True"
    
    309
    +        ]
    
    310
    +
    
    261 311
     -- | Use the LLVM backend in stages 1 and later.
    
    262 312
     viaLlvmBackend :: Flavour -> Flavour
    
    263 313
     viaLlvmBackend = addArgs $ notStage0 ? builder Ghc ? arg "-fllvm"
    

  • rts/.ubsan-suppressions
    1
    +# libraries/text/cbits/measure_off.c:50:39: runtime left shift of 1 by 31 places cannot be represented in type 'int'
    
    2
    +shift-base:libraries/text/cbits/measure_off.c
    
    3
    +
    
    4
    +# "runtime call to function foo through pointer to incorrect function
    
    5
    +# type" is unfortunately pretty common (e.g. evac_fn in rts) and
    
    6
    +# impact the signal to noise ratio of UBSan warnings. gcc doesn't
    
    7
    +# implement this instrumentation though.
    
    8
    +function:*

  • rts/Interpreter.c
    ... ... @@ -274,12 +274,21 @@ See also Note [Width of parameters] for some more motivation.
    274 274
     
    
    275 275
     #define W64_TO_WDS(n) ((n * sizeof(StgWord64) / sizeof(StgWord)))
    
    276 276
     
    
    277
    +// Returns a pointer to the stack location.
    
    278
    +#define SafeSpWP(n)      \
    
    279
    +  ( ((WITHIN_CAP_CHUNK_BOUNDS_W(n)) ? Sp_plusW(n) : slow_spw(Sp, cap->r.rCurrentTSO->stackobj, n)))
    
    280
    +#define SafeSpBP(off_w)      \
    
    281
    +  ( (WITHIN_CAP_CHUNK_BOUNDS_W((1+(off_w))/sizeof(StgWord))) ? \
    
    282
    +        Sp_plusB(off_w) : \
    
    283
    +        (void*)((ptrdiff_t)((ptrdiff_t)(off_w) % (ptrdiff_t)sizeof(StgWord)) + (StgWord8*)slow_spw(Sp, cap->r.rCurrentTSO->stackobj, (off_w)/sizeof(StgWord))) \
    
    284
    +    )
    
    285
    +
    
    277 286
     // Always safe to use - Return the value at the address
    
    278 287
     #define ReadSpW(n)       (*((StgWord*)   SafeSpWP(n)))
    
    279 288
     //Argument is offset in multiples of word64
    
    280 289
     #define ReadSpW64(n)     (*((StgWord64*) SafeSpWP(W64_TO_WDS(n))))
    
    281 290
     // Perhaps confusingly this still reads a full word, merely the offset is in bytes.
    
    282
    -#define ReadSpB(n)       (*((StgWord*)   SafeSpBP(n)))
    
    291
    +#define ReadSpB(n)       (*((StgUnalignedWord*)   SafeSpBP(n)))
    
    283 292
     
    
    284 293
     /* Note [PUSH_L underflow]
    
    285 294
        ~~~~~~~~~~~~~~~~~~~~~~~
    
    ... ... @@ -326,15 +335,6 @@ See ticket #25750
    326 335
     
    
    327 336
     */
    
    328 337
     
    
    329
    -// Returns a pointer to the stack location.
    
    330
    -#define SafeSpWP(n)      \
    
    331
    -  ( ((WITHIN_CAP_CHUNK_BOUNDS_W(n)) ? Sp_plusW(n) : slow_spw(Sp, cap->r.rCurrentTSO->stackobj, n)))
    
    332
    -#define SafeSpBP(off_w)      \
    
    333
    -  ( (WITHIN_CAP_CHUNK_BOUNDS_W((1+(off_w))/sizeof(StgWord))) ? \
    
    334
    -        Sp_plusB(off_w) : \
    
    335
    -        (void*)((ptrdiff_t)((ptrdiff_t)(off_w) % (ptrdiff_t)sizeof(StgWord)) + (StgWord8*)slow_spw(Sp, cap->r.rCurrentTSO->stackobj, (off_w)/sizeof(StgWord))) \
    
    336
    -    )
    
    337
    -
    
    338 338
     
    
    339 339
     
    
    340 340
     /* Note [Interpreter subword primops]
    
    ... ... @@ -2904,57 +2904,106 @@ run_BCO:
    2904 2904
             NEXT_INSTRUCTION;                                              \
    
    2905 2905
         }
    
    2906 2906
     
    
    2907
    +/* Note [Cmm arithmetic in interpretBCO]
    
    2908
    +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    2909
    +
    
    2910
    +interpretBCO implements Cmm arithmetic primops by loading operands
    
    2911
    +from the stack as C integers, applying C arithmetic operation, then
    
    2912
    +storing the result back to the stack. But there are subtle differences
    
    2913
    +in Cmm and C arithmetic operations:
    
    2914
    +
    
    2915
    +- The Cmm type system only tracks operand sizes for integer types, and
    
    2916
    +  doesn't track signedness (#20652)
    
    2917
    +- Cmm arithmetic operations are allowed to overflow based on two's
    
    2918
    +  complement wrap-around semantics
    
    2919
    +
    
    2920
    +Meanwhile in C:
    
    2921
    +
    
    2922
    +- The C type system tracks signedness
    
    2923
    +- Signed overflow is undefined behavior
    
    2924
    +- Subword operands are implicitly promoted to int
    
    2925
    +
    
    2926
    +Consider an example where we do an `MO_Mul W16` on both 0xFFFF.
    
    2927
    +Previously we would load each operand as a word, cast to a subword and
    
    2928
    +do the multiplication. But C actually does multiplication on int,
    
    2929
    +which is 32-bit on most platforms, and now a signed overflow occurs!
    
    2930
    +
    
    2931
    +To perform Cmm arithmetic without tripping on C undefined behavior, we
    
    2932
    +now:
    
    2933
    +
    
    2934
    +- Always specify unsigned C operand type for the Cmm primop, unless
    
    2935
    +  signed operand is absolutely needed for correctness (e.g. signed
    
    2936
    +  comparison or right shift)
    
    2937
    +- Explicitly promote operands to a C type no smaller than a host word,
    
    2938
    +  so either StgInt or StgWord, depending on the signedness of ty,
    
    2939
    +  hence the TYPE_IS_SIGNED macro
    
    2940
    +*/
    
    2941
    +
    
    2942
    +#define TYPE_IS_SIGNED(ty) ((ty)-1 < (ty)1)
    
    2943
    +
    
    2907 2944
     // op :: ty -> ty -> ty
    
    2908 2945
     #define SIZED_BIN_OP(op,ty)                                                     \
    
    2909 2946
             {                                                                       \
    
    2910 2947
                 if(sizeof(ty) == 8) {                                               \
    
    2911
    -                ty r = ((ty) ReadSpW64(0)) op ((ty) ReadSpW64(1));                  \
    
    2948
    +                ty r = ((ty) ReadSpW64(0)) op ((ty) ReadSpW64(1));              \
    
    2912 2949
                     Sp_addW64(1);                                                   \
    
    2913 2950
                     SpW64(0) = (StgWord64) r;                                       \
    
    2951
    +            } else if (TYPE_IS_SIGNED(ty)) {                                    \
    
    2952
    +                ty r = ((StgInt)(ty)ReadSpW(0)) op ((StgInt)(ty)ReadSpW(1));    \
    
    2953
    +                Sp_addW(1);                                                     \
    
    2954
    +                SpW(0) = (StgWord) r;                                           \
    
    2914 2955
                 } else {                                                            \
    
    2915
    -                ty r = ((ty) ReadSpW(0)) op ((ty) ReadSpW(1));                  \
    
    2956
    +                ty r = ((StgWord)(ty)ReadSpW(0)) op ((StgWord)(ty)ReadSpW(1));  \
    
    2916 2957
                     Sp_addW(1);                                                     \
    
    2917 2958
                     SpW(0) = (StgWord) r;                                           \
    
    2918 2959
                 };                                                                  \
    
    2919
    -            NEXT_INSTRUCTION;                                                      \
    
    2960
    +            NEXT_INSTRUCTION;                                                   \
    
    2920 2961
             }
    
    2921 2962
     
    
    2922 2963
     // op :: ty -> Int -> ty
    
    2923
    -#define SIZED_BIN_OP_TY_INT(op,ty)                                      \
    
    2924
    -{                                                                       \
    
    2925
    -    if(sizeof(ty) > sizeof(StgWord)) {                                  \
    
    2926
    -        ty r = ((ty) ReadSpW64(0)) op ((StgInt) ReadSpW(2));                \
    
    2927
    -        Sp_addW(1);                                                     \
    
    2928
    -        SpW64(0) = (StgWord64) r;                                       \
    
    2929
    -    } else {                                                            \
    
    2930
    -        ty r = ((ty) ReadSpW(0)) op ((StgInt) ReadSpW(1));                  \
    
    2931
    -        Sp_addW(1);                                                     \
    
    2932
    -        SpW(0) = (StgWord) r;                                           \
    
    2933
    -    };                                                                  \
    
    2934
    -    NEXT_INSTRUCTION;                                                      \
    
    2964
    +#define SIZED_BIN_OP_TY_INT(op,ty)                                  \
    
    2965
    +{                                                                   \
    
    2966
    +    if(sizeof(ty) > sizeof(StgWord)) {                              \
    
    2967
    +        ty r = ((ty) ReadSpW64(0)) op ((StgInt) ReadSpW(2));        \
    
    2968
    +        Sp_addW(1);                                                 \
    
    2969
    +        SpW64(0) = (StgWord64) r;                                   \
    
    2970
    +    } else if (TYPE_IS_SIGNED(ty)) {                                \
    
    2971
    +        ty r = ((StgInt)(ty) ReadSpW(0)) op ((StgInt) ReadSpW(1));  \
    
    2972
    +        Sp_addW(1);                                                 \
    
    2973
    +        SpW(0) = (StgWord) r;                                       \
    
    2974
    +    } else {                                                        \
    
    2975
    +        ty r = ((StgWord)(ty) ReadSpW(0)) op ((StgInt) ReadSpW(1)); \
    
    2976
    +        Sp_addW(1);                                                 \
    
    2977
    +        SpW(0) = (StgWord) r;                                       \
    
    2978
    +    };                                                              \
    
    2979
    +    NEXT_INSTRUCTION;                                               \
    
    2935 2980
     }
    
    2936 2981
     
    
    2937 2982
     // op :: ty -> ty -> Int
    
    2938
    -#define SIZED_BIN_OP_TY_TY_INT(op,ty)                                   \
    
    2939
    -{                                                                       \
    
    2940
    -    if(sizeof(ty) > sizeof(StgWord)) {                                  \
    
    2941
    -        ty r = ((ty) ReadSpW64(0)) op ((ty) ReadSpW64(1));              \
    
    2942
    -        Sp_addW(3);                                                     \
    
    2943
    -        SpW(0) = (StgWord) r;                                       \
    
    2944
    -    } else {                                                            \
    
    2945
    -        ty r = ((ty) ReadSpW(0)) op ((ty) ReadSpW(1));                  \
    
    2946
    -        Sp_addW(1);                                                     \
    
    2947
    -        SpW(0) = (StgWord) r;                                           \
    
    2948
    -    };                                                                  \
    
    2949
    -    NEXT_INSTRUCTION;                                                      \
    
    2983
    +#define SIZED_BIN_OP_TY_TY_INT(op,ty)                                        \
    
    2984
    +{                                                                            \
    
    2985
    +    if(sizeof(ty) > sizeof(StgWord)) {                                       \
    
    2986
    +        StgInt r = ((ty) ReadSpW64(0)) op ((ty) ReadSpW64(1));               \
    
    2987
    +        Sp_addW(3);                                                          \
    
    2988
    +        SpW(0) = (StgWord) r;                                                \
    
    2989
    +    } else if (TYPE_IS_SIGNED(ty)) {                                         \
    
    2990
    +        StgInt r = ((StgInt)(ty) ReadSpW(0)) op ((StgInt)(ty) ReadSpW(1));   \
    
    2991
    +        Sp_addW(1);                                                          \
    
    2992
    +        SpW(0) = (StgWord) r;                                                \
    
    2993
    +    } else {                                                                 \
    
    2994
    +        StgInt r = ((StgWord)(ty) ReadSpW(0)) op ((StgWord)(ty) ReadSpW(1)); \
    
    2995
    +        Sp_addW(1);                                                          \
    
    2996
    +        SpW(0) = (StgWord) r;                                                \
    
    2997
    +    };                                                                       \
    
    2998
    +    NEXT_INSTRUCTION;                                                        \
    
    2950 2999
     }
    
    2951 3000
     
    
    2952
    -        INSTRUCTION(bci_OP_ADD_64): SIZED_BIN_OP(+, StgInt64)
    
    2953
    -        INSTRUCTION(bci_OP_SUB_64): SIZED_BIN_OP(-, StgInt64)
    
    2954
    -        INSTRUCTION(bci_OP_AND_64): SIZED_BIN_OP(&, StgInt64)
    
    2955
    -        INSTRUCTION(bci_OP_XOR_64): SIZED_BIN_OP(^, StgInt64)
    
    2956
    -        INSTRUCTION(bci_OP_OR_64):  SIZED_BIN_OP(|, StgInt64)
    
    2957
    -        INSTRUCTION(bci_OP_MUL_64): SIZED_BIN_OP(*, StgInt64)
    
    3001
    +        INSTRUCTION(bci_OP_ADD_64): SIZED_BIN_OP(+, StgWord64)
    
    3002
    +        INSTRUCTION(bci_OP_SUB_64): SIZED_BIN_OP(-, StgWord64)
    
    3003
    +        INSTRUCTION(bci_OP_AND_64): SIZED_BIN_OP(&, StgWord64)
    
    3004
    +        INSTRUCTION(bci_OP_XOR_64): SIZED_BIN_OP(^, StgWord64)
    
    3005
    +        INSTRUCTION(bci_OP_OR_64):  SIZED_BIN_OP(|, StgWord64)
    
    3006
    +        INSTRUCTION(bci_OP_MUL_64): SIZED_BIN_OP(*, StgWord64)
    
    2958 3007
             INSTRUCTION(bci_OP_SHL_64): SIZED_BIN_OP_TY_INT(<<, StgWord64)
    
    2959 3008
             INSTRUCTION(bci_OP_LSR_64): SIZED_BIN_OP_TY_INT(>>, StgWord64)
    
    2960 3009
             INSTRUCTION(bci_OP_ASR_64): SIZED_BIN_OP_TY_INT(>>, StgInt64)
    
    ... ... @@ -2972,15 +3021,15 @@ run_BCO:
    2972 3021
             INSTRUCTION(bci_OP_S_LE_64): SIZED_BIN_OP_TY_TY_INT(<=, StgInt64)
    
    2973 3022
     
    
    2974 3023
             INSTRUCTION(bci_OP_NOT_64): UN_SIZED_OP(~, StgWord64)
    
    2975
    -        INSTRUCTION(bci_OP_NEG_64): UN_SIZED_OP(-, StgInt64)
    
    3024
    +        INSTRUCTION(bci_OP_NEG_64): UN_SIZED_OP(-, StgWord64)
    
    2976 3025
     
    
    2977 3026
     
    
    2978
    -        INSTRUCTION(bci_OP_ADD_32): SIZED_BIN_OP(+, StgInt32)
    
    2979
    -        INSTRUCTION(bci_OP_SUB_32): SIZED_BIN_OP(-, StgInt32)
    
    2980
    -        INSTRUCTION(bci_OP_AND_32): SIZED_BIN_OP(&, StgInt32)
    
    2981
    -        INSTRUCTION(bci_OP_XOR_32): SIZED_BIN_OP(^, StgInt32)
    
    2982
    -        INSTRUCTION(bci_OP_OR_32):  SIZED_BIN_OP(|, StgInt32)
    
    2983
    -        INSTRUCTION(bci_OP_MUL_32): SIZED_BIN_OP(*, StgInt32)
    
    3027
    +        INSTRUCTION(bci_OP_ADD_32): SIZED_BIN_OP(+, StgWord32)
    
    3028
    +        INSTRUCTION(bci_OP_SUB_32): SIZED_BIN_OP(-, StgWord32)
    
    3029
    +        INSTRUCTION(bci_OP_AND_32): SIZED_BIN_OP(&, StgWord32)
    
    3030
    +        INSTRUCTION(bci_OP_XOR_32): SIZED_BIN_OP(^, StgWord32)
    
    3031
    +        INSTRUCTION(bci_OP_OR_32):  SIZED_BIN_OP(|, StgWord32)
    
    3032
    +        INSTRUCTION(bci_OP_MUL_32): SIZED_BIN_OP(*, StgWord32)
    
    2984 3033
             INSTRUCTION(bci_OP_SHL_32): SIZED_BIN_OP_TY_INT(<<, StgWord32)
    
    2985 3034
             INSTRUCTION(bci_OP_LSR_32): SIZED_BIN_OP_TY_INT(>>, StgWord32)
    
    2986 3035
             INSTRUCTION(bci_OP_ASR_32): SIZED_BIN_OP_TY_INT(>>, StgInt32)
    
    ... ... @@ -2998,15 +3047,15 @@ run_BCO:
    2998 3047
             INSTRUCTION(bci_OP_S_LE_32): SIZED_BIN_OP_TY_TY_INT(<=, StgInt32)
    
    2999 3048
     
    
    3000 3049
             INSTRUCTION(bci_OP_NOT_32): UN_SIZED_OP(~, StgWord32)
    
    3001
    -        INSTRUCTION(bci_OP_NEG_32): UN_SIZED_OP(-, StgInt32)
    
    3050
    +        INSTRUCTION(bci_OP_NEG_32): UN_SIZED_OP(-, StgWord32)
    
    3002 3051
     
    
    3003 3052
     
    
    3004
    -        INSTRUCTION(bci_OP_ADD_16): SIZED_BIN_OP(+, StgInt16)
    
    3005
    -        INSTRUCTION(bci_OP_SUB_16): SIZED_BIN_OP(-, StgInt16)
    
    3006
    -        INSTRUCTION(bci_OP_AND_16): SIZED_BIN_OP(&, StgInt16)
    
    3007
    -        INSTRUCTION(bci_OP_XOR_16): SIZED_BIN_OP(^, StgInt16)
    
    3008
    -        INSTRUCTION(bci_OP_OR_16):  SIZED_BIN_OP(|, StgInt16)
    
    3009
    -        INSTRUCTION(bci_OP_MUL_16): SIZED_BIN_OP(*, StgInt16)
    
    3053
    +        INSTRUCTION(bci_OP_ADD_16): SIZED_BIN_OP(+, StgWord16)
    
    3054
    +        INSTRUCTION(bci_OP_SUB_16): SIZED_BIN_OP(-, StgWord16)
    
    3055
    +        INSTRUCTION(bci_OP_AND_16): SIZED_BIN_OP(&, StgWord16)
    
    3056
    +        INSTRUCTION(bci_OP_XOR_16): SIZED_BIN_OP(^, StgWord16)
    
    3057
    +        INSTRUCTION(bci_OP_OR_16):  SIZED_BIN_OP(|, StgWord16)
    
    3058
    +        INSTRUCTION(bci_OP_MUL_16): SIZED_BIN_OP(*, StgWord16)
    
    3010 3059
             INSTRUCTION(bci_OP_SHL_16): SIZED_BIN_OP_TY_INT(<<, StgWord16)
    
    3011 3060
             INSTRUCTION(bci_OP_LSR_16): SIZED_BIN_OP_TY_INT(>>, StgWord16)
    
    3012 3061
             INSTRUCTION(bci_OP_ASR_16): SIZED_BIN_OP_TY_INT(>>, StgInt16)
    
    ... ... @@ -3024,15 +3073,15 @@ run_BCO:
    3024 3073
             INSTRUCTION(bci_OP_S_LE_16): SIZED_BIN_OP(<=, StgInt16)
    
    3025 3074
     
    
    3026 3075
             INSTRUCTION(bci_OP_NOT_16): UN_SIZED_OP(~, StgWord16)
    
    3027
    -        INSTRUCTION(bci_OP_NEG_16): UN_SIZED_OP(-, StgInt16)
    
    3076
    +        INSTRUCTION(bci_OP_NEG_16): UN_SIZED_OP(-, StgWord16)
    
    3028 3077
     
    
    3029 3078
     
    
    3030
    -        INSTRUCTION(bci_OP_ADD_08): SIZED_BIN_OP(+, StgInt8)
    
    3031
    -        INSTRUCTION(bci_OP_SUB_08): SIZED_BIN_OP(-, StgInt8)
    
    3032
    -        INSTRUCTION(bci_OP_AND_08): SIZED_BIN_OP(&, StgInt8)
    
    3033
    -        INSTRUCTION(bci_OP_XOR_08): SIZED_BIN_OP(^, StgInt8)
    
    3034
    -        INSTRUCTION(bci_OP_OR_08):  SIZED_BIN_OP(|, StgInt8)
    
    3035
    -        INSTRUCTION(bci_OP_MUL_08): SIZED_BIN_OP(*, StgInt8)
    
    3079
    +        INSTRUCTION(bci_OP_ADD_08): SIZED_BIN_OP(+, StgWord8)
    
    3080
    +        INSTRUCTION(bci_OP_SUB_08): SIZED_BIN_OP(-, StgWord8)
    
    3081
    +        INSTRUCTION(bci_OP_AND_08): SIZED_BIN_OP(&, StgWord8)
    
    3082
    +        INSTRUCTION(bci_OP_XOR_08): SIZED_BIN_OP(^, StgWord8)
    
    3083
    +        INSTRUCTION(bci_OP_OR_08):  SIZED_BIN_OP(|, StgWord8)
    
    3084
    +        INSTRUCTION(bci_OP_MUL_08): SIZED_BIN_OP(*, StgWord8)
    
    3036 3085
             INSTRUCTION(bci_OP_SHL_08): SIZED_BIN_OP_TY_INT(<<, StgWord8)
    
    3037 3086
             INSTRUCTION(bci_OP_LSR_08): SIZED_BIN_OP_TY_INT(>>, StgWord8)
    
    3038 3087
             INSTRUCTION(bci_OP_ASR_08): SIZED_BIN_OP_TY_INT(>>, StgInt8)
    
    ... ... @@ -3050,7 +3099,7 @@ run_BCO:
    3050 3099
             INSTRUCTION(bci_OP_S_LE_08): SIZED_BIN_OP_TY_TY_INT(<=, StgInt8)
    
    3051 3100
     
    
    3052 3101
             INSTRUCTION(bci_OP_NOT_08): UN_SIZED_OP(~, StgWord8)
    
    3053
    -        INSTRUCTION(bci_OP_NEG_08): UN_SIZED_OP(-, StgInt8)
    
    3102
    +        INSTRUCTION(bci_OP_NEG_08): UN_SIZED_OP(-, StgWord8)
    
    3054 3103
     
    
    3055 3104
             INSTRUCTION(bci_OP_INDEX_ADDR_64):
    
    3056 3105
             {
    
    ... ... @@ -3130,7 +3179,7 @@ run_BCO:
    3130 3179
                 StgPtr p;
    
    3131 3180
                 W_ ret[2];                  // max needed
    
    3132 3181
                 W_ *arguments[stk_offset];  // max needed
    
    3133
    -            void *argptrs[nargs];
    
    3182
    +            void *argptrs[nargs > 0 ? nargs : 1]; // the size of a variable length array must be positive
    
    3134 3183
                 void (*fn)(void);
    
    3135 3184
     
    
    3136 3185
                 if (cif->rtype == &ffi_type_void) {
    

  • rts/include/stg/Types.h
    ... ... @@ -147,6 +147,8 @@ typedef uint16_t StgHalfWord;
    147 147
     #error GHC untested on this architecture: sizeof(void *) != 4 or 8
    
    148 148
     #endif
    
    149 149
     
    
    150
    +typedef StgWord StgUnalignedWord __attribute__((aligned(1)));
    
    151
    +
    
    150 152
     #define W_MASK  (sizeof(W_)-1)
    
    151 153
     
    
    152 154
     /*
    

  • rts/rts.cabal
    ... ... @@ -91,6 +91,19 @@ flag thread-sanitizer
    91 91
         in @rts/include/rts/TSANUtils.h@.
    
    92 92
       default: False
    
    93 93
       manual: True
    
    94
    +flag ubsan
    
    95
    +  description:
    
    96
    +    Link with -fsanitize=undefined, to be enabled when building with
    
    97
    +    UndefinedBehaviorSanitizer.
    
    98
    +  default: False
    
    99
    +  manual: True
    
    100
    +flag shared-libsan
    
    101
    +  description:
    
    102
    +    Link with -shared-libsan, to guarantee only one copy of the
    
    103
    +    sanitizer runtimes exist in the address space. See
    
    104
    +    needSharedLibSAN in hadrian/src/Flavour.hs.
    
    105
    +  default: False
    
    106
    +  manual: True
    
    94 107
     
    
    95 108
     library
    
    96 109
         -- rts is a wired in package and
    
    ... ... @@ -200,6 +213,12 @@ library
    200 213
             cc-options: -fsanitize=thread
    
    201 214
             ld-options: -fsanitize=thread
    
    202 215
     
    
    216
    +      if flag(ubsan)
    
    217
    +        ld-options: -fsanitize=undefined
    
    218
    +
    
    219
    +      if flag(shared-libsan)
    
    220
    +        ld-options: -shared-libsan
    
    221
    +
    
    203 222
           if os(linux)
    
    204 223
              -- the RTS depends upon libc. while this dependency is generally
    
    205 224
              -- implicitly added by `cc`, we must explicitly add it here to ensure
    

  • testsuite/driver/testglobals.py
    ... ... @@ -186,6 +186,9 @@ class TestConfig:
    186 186
             # Are we running in a ThreadSanitizer-instrumented build?
    
    187 187
             self.have_thread_sanitizer = False
    
    188 188
     
    
    189
    +        # Are we running with UndefinedBehaviorSanitizer enabled?
    
    190
    +        self.have_ubsan = False
    
    191
    +
    
    189 192
             # Do symbols use leading underscores?
    
    190 193
             self.leading_underscore = False
    
    191 194
     
    

  • testsuite/driver/testlib.py
    ... ... @@ -1090,6 +1090,8 @@ def llvm_build ( ) -> bool:
    1090 1090
     def have_thread_sanitizer( ) -> bool:
    
    1091 1091
         return config.have_thread_sanitizer
    
    1092 1092
     
    
    1093
    +def have_ubsan( ) -> bool:
    
    1094
    +    return config.have_ubsan
    
    1093 1095
     
    
    1094 1096
     def gcc_as_cmmp() -> bool:
    
    1095 1097
         return config.cmm_cpp_is_gcc