[Git][ghc/ghc][wip/mangoiv/improve-linker-discovery] ci/revert: don't do strict toolchain check for now
by Magnus (@MangoIV) 30 Jul '26
by Magnus (@MangoIV) 30 Jul '26
30 Jul '26
Magnus pushed to branch wip/mangoiv/improve-linker-discovery at Glasgow Haskell Compiler / GHC
Commits:
9ae21559 by mangoiv at 2026-07-30T18:14:40+02:00
ci/revert: don't do strict toolchain check for now
- - - - -
2 changed files:
- .gitlab/generate-ci/gen_ci.hs
- .gitlab/jobs.yaml
Changes:
=====================================
.gitlab/generate-ci/gen_ci.hs
=====================================
@@ -182,7 +182,7 @@ configureArgsStr bc = unwords $
++ ["--with-intree-gmp" | Just _ <- [crossTarget bc] ]
++ ["--with-system-libffi" | crossTarget bc == Just "wasm32-wasi" ]
++ ["--enable-ipe-data-compression" | withZstd bc ]
- ++ ["--enable-strict-ghc-toolchain-check"]
+ -- ++ ["--enable-strict-ghc-toolchain-check"]
-- Compute the hadrian flavour from the BuildConfig
mkJobFlavour :: BuildConfig -> Flavour
=====================================
.gitlab/jobs.yaml
=====================================
@@ -56,7 +56,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-darwin-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"LANG": "en_US.UTF-8",
@@ -124,7 +124,7 @@
"BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_23-validate",
"BROKEN_TESTS": "encoding004 T10458",
"BUILD_FLAVOUR": "validate",
- "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",
+ "CONFIGURE_ARGS": "--disable-ld-override --enable-ignore-build-platform-mismatch --build=aarch64-unknown-linux --host=aarch64-unknown-linux --target=aarch64-unknown-linux ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-alpine3_23-validate",
@@ -187,7 +187,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb11-validate",
@@ -250,7 +250,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb12-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb12-validate",
@@ -316,7 +316,7 @@
"BUILD_FLAVOUR": "validate",
"CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
"CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
"CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine",
"CROSS_STAGE": "2",
@@ -400,7 +400,7 @@
"BUILD_FLAVOUR": "validate+llvm",
"CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
"CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
"CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine",
"CROSS_STAGE": "2",
@@ -481,7 +481,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb13-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb13-validate",
@@ -544,7 +544,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb13-validate+llvm",
"BUILD_FLAVOUR": "validate+llvm",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb13-validate+llvm",
@@ -608,7 +608,7 @@
"BIN_DIST_NAME": "ghc-i386-linux-alpine3_23-validate",
"BROKEN_TESTS": "encoding004 T10458 simd009 T25169",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-alpine3_23-validate",
@@ -671,7 +671,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-deb11-validate",
@@ -734,7 +734,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb12-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-deb12-validate",
@@ -797,7 +797,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb13-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-deb13-validate",
@@ -860,7 +860,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-darwin-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"LANG": "en_US.UTF-8",
@@ -929,7 +929,7 @@
"BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_23-validate",
"BROKEN_TESTS": "encoding004 T10458",
"BUILD_FLAVOUR": "validate",
- "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",
+ "CONFIGURE_ARGS": "--disable-ld-override --enable-ignore-build-platform-mismatch --build=aarch64-unknown-linux --host=aarch64-unknown-linux --target=aarch64-unknown-linux ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-alpine3_23-validate",
@@ -993,7 +993,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb11-validate",
@@ -1057,7 +1057,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb12-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb12-validate",
@@ -1124,7 +1124,7 @@
"BUILD_FLAVOUR": "validate",
"CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
"CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
"CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine",
"CROSS_STAGE": "2",
@@ -1209,7 +1209,7 @@
"BUILD_FLAVOUR": "validate+llvm",
"CC": "/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-clang",
"CFLAGS": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CONF_CC_OPTS_STAGE2": "-fuse-ld=/opt/llvm-mingw-linux/bin/aarch64-w64-mingw32-ld --rtlib=compiler-rt",
"CROSS_EMULATOR": "/opt/wine-arm64ec-msys2-deb12/bin/wine",
"CROSS_STAGE": "2",
@@ -1291,7 +1291,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb13-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb13-validate",
@@ -1355,7 +1355,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb13-validate+llvm",
"BUILD_FLAVOUR": "validate+llvm",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "aarch64-linux-deb13-validate+llvm",
@@ -1420,7 +1420,7 @@
"BIN_DIST_NAME": "ghc-i386-linux-alpine3_23-validate",
"BROKEN_TESTS": "encoding004 T10458 simd009 T25169",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-alpine3_23-validate",
@@ -1484,7 +1484,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-deb11-validate",
@@ -1548,7 +1548,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb12-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-deb12-validate",
@@ -1612,7 +1612,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb13-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "i386-linux-deb13-validate",
@@ -1676,7 +1676,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-darwin-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"LANG": "en_US.UTF-8",
@@ -1748,7 +1748,7 @@
"BUILD_FLAVOUR": "validate",
"CABAL_INSTALL_VERSION": "3.14.2.0",
"CC": "cc",
- "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib ",
"CXX": "c++",
"FETCH_GHC_VERSION": "9.10.3",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -1815,7 +1815,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_12-int_native-validate+fully_static",
"BROKEN_TESTS": "ghcilink002 linker_unload_native encoding004 T10458",
"BUILD_FLAVOUR": "validate+fully_static",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-alpine3_12-int_native-validate+fully_static",
@@ -1880,7 +1880,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_12-validate+fully_static",
"BROKEN_TESTS": "ghcilink002 linker_unload_native encoding004 T10458",
"BUILD_FLAVOUR": "validate+fully_static",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-alpine3_12-validate+fully_static",
@@ -1945,7 +1945,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-validate",
"BROKEN_TESTS": "encoding004 T10458",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-alpine3_23-validate",
@@ -2009,7 +2009,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
"BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi",
"CROSS_STAGE": "2",
"CROSS_TARGET": "wasm32-wasi",
"FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
@@ -2076,7 +2076,7 @@
"BIGNUM_BACKEND": "native",
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
"BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi",
"CROSS_STAGE": "2",
"CROSS_TARGET": "wasm32-wasi",
"FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
@@ -2143,7 +2143,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
"BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
- "CONFIGURE_ARGS": "--enable-unregisterised --with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--enable-unregisterised --with-intree-gmp --with-system-libffi",
"CROSS_STAGE": "2",
"CROSS_TARGET": "wasm32-wasi",
"FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
@@ -2210,7 +2210,7 @@
"BIGNUM_BACKEND": "native",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-emsdk-closure-int_native-cross_javascript-unknown-ghcjs-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CONFIGURE_WRAPPER": "emconfigure",
"CROSS_STAGE": "2",
"CROSS_TARGET": "javascript-unknown-ghcjs",
@@ -2277,7 +2277,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb11-validate",
@@ -2341,7 +2341,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate+debug_info",
"BUILD_FLAVOUR": "validate+debug_info",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb11-validate+debug_info",
@@ -2405,7 +2405,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb12-validate",
@@ -2469,7 +2469,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-cross_aarch64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
"CROSS_STAGE": "2",
"CROSS_TARGET": "aarch64-linux-gnu",
@@ -2536,7 +2536,7 @@
"BIGNUM_BACKEND": "native",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-int_native-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-int_native-validate",
@@ -2600,7 +2600,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-no_tntc-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--disable-tables-next-to-code --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-tables-next-to-code",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-no_tntc-validate",
@@ -2664,7 +2664,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-numa-slow-validate",
"BUILD_FLAVOUR": "slow-validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"ENABLE_NUMA": "1",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -2729,7 +2729,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": " --config perf_path=perf",
"TEST_ENV": "x86_64-linux-deb13-release",
@@ -2793,7 +2793,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CROSS_EMULATOR": "qemu-riscv64 -L /usr/riscv64-linux-gnu",
"CROSS_STAGE": "2",
"CROSS_TARGET": "riscv64-linux-gnu",
@@ -2860,7 +2860,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-unreg-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-unregisterised --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--enable-unregisterised",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-unreg-validate",
@@ -2924,7 +2924,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-validate",
@@ -2988,7 +2988,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate+boot_nonmoving_gc",
"BUILD_FLAVOUR": "validate+boot_nonmoving_gc",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
"TEST_ENV": "x86_64-linux-deb13-validate+boot_nonmoving_gc",
@@ -3052,7 +3052,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate+llvm",
"BUILD_FLAVOUR": "validate+llvm",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-validate+llvm",
@@ -3116,7 +3116,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate+thread_sanitizer_cmm",
"BUILD_FLAVOUR": "validate+thread_sanitizer_cmm",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--docs=none",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -3182,7 +3182,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-zstd-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-ipe-data-compression --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--enable-ipe-data-compression",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-zstd-validate",
@@ -3246,7 +3246,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-fedora43-release",
@@ -3310,7 +3310,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--haddock-for-hackage",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -3375,7 +3375,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-fedora43-validate",
@@ -3439,7 +3439,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info",
"BUILD_FLAVOUR": "validate+debug_info",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-fedora43-validate+debug_info",
@@ -3503,7 +3503,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info+ubsan",
"BUILD_FLAVOUR": "validate+debug_info+ubsan",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--docs=none",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -3569,7 +3569,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-rocky8-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-rocky8-validate",
@@ -3633,7 +3633,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu22_04-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-ubuntu22_04-validate",
@@ -3697,7 +3697,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CROSS_EMULATOR": "qemu-loongarch64 -L /usr/loongarch64-linux-gnu",
"CROSS_STAGE": "2",
"CROSS_TARGET": "loongarch64-linux-gnu",
@@ -3764,7 +3764,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-ubuntu24_04-validate",
@@ -3824,7 +3824,7 @@
"BIN_DIST_NAME": "ghc-x86_64-windows-int_native-validate",
"BUILD_FLAVOUR": "validate",
"CABAL_INSTALL_VERSION": "3.14.2.0",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"FETCH_GHC_VERSION": "9.10.3",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -3888,7 +3888,7 @@
"BIN_DIST_NAME": "ghc-x86_64-windows-validate",
"BUILD_FLAVOUR": "validate",
"CABAL_INSTALL_VERSION": "3.14.2.0",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"FETCH_GHC_VERSION": "9.10.3",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -3956,7 +3956,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-darwin-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -4026,7 +4026,7 @@
"BIN_DIST_NAME": "ghc-aarch64-linux-alpine3_23-release+no_split_sections",
"BROKEN_TESTS": "encoding004 T10458",
"BUILD_FLAVOUR": "release+no_split_sections",
- "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",
+ "CONFIGURE_ARGS": "--disable-ld-override --enable-ignore-build-platform-mismatch --build=aarch64-unknown-linux --host=aarch64-unknown-linux --target=aarch64-unknown-linux ",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4091,7 +4091,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb11-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4156,7 +4156,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb12-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4221,7 +4221,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-aarch64-linux-deb13-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4287,7 +4287,7 @@
"BIN_DIST_NAME": "ghc-i386-linux-alpine3_23-release+no_split_sections",
"BROKEN_TESTS": "encoding004 T10458 simd009 T25169",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4352,7 +4352,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb11-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4417,7 +4417,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb12-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4482,7 +4482,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-i386-linux-deb13-release+no_split_sections",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4547,7 +4547,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-darwin-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -4620,7 +4620,7 @@
"BUILD_FLAVOUR": "release+no_split_sections",
"CABAL_INSTALL_VERSION": "3.14.2.0",
"CC": "cc",
- "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib ",
"CXX": "c++",
"FETCH_GHC_VERSION": "9.10.3",
"IGNORE_PERF_FAILURES": "all",
@@ -4688,7 +4688,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_12-int_native-release+fully_static",
"BROKEN_TESTS": "ghcilink002 linker_unload_native encoding004 T10458",
"BUILD_FLAVOUR": "release+fully_static",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4754,7 +4754,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_12-release+fully_static+no_split_sections",
"BROKEN_TESTS": "ghcilink002 linker_unload_native encoding004 T10458",
"BUILD_FLAVOUR": "release+fully_static+no_split_sections",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4820,7 +4820,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-release+no_split_sections",
"BROKEN_TESTS": "encoding004 T10458",
"BUILD_FLAVOUR": "release+no_split_sections",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4885,7 +4885,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -4950,7 +4950,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-release+debug_info",
"BUILD_FLAVOUR": "release+debug_info",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5015,7 +5015,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb12-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5080,7 +5080,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5145,7 +5145,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5210,7 +5210,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release+debug_info",
"BUILD_FLAVOUR": "release+debug_info",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5275,7 +5275,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--haddock-for-hackage",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -5341,7 +5341,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-rocky8-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5406,7 +5406,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu22_04-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5471,7 +5471,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"IGNORE_PERF_FAILURES": "all",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -5532,7 +5532,7 @@
"BIN_DIST_NAME": "ghc-x86_64-windows-int_native-release",
"BUILD_FLAVOUR": "release",
"CABAL_INSTALL_VERSION": "3.14.2.0",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"FETCH_GHC_VERSION": "9.10.3",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"IGNORE_PERF_FAILURES": "all",
@@ -5597,7 +5597,7 @@
"BIN_DIST_NAME": "ghc-x86_64-windows-release",
"BUILD_FLAVOUR": "release",
"CABAL_INSTALL_VERSION": "3.14.2.0",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"FETCH_GHC_VERSION": "9.10.3",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"IGNORE_PERF_FAILURES": "all",
@@ -5666,7 +5666,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-darwin-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi ",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"LANG": "en_US.UTF-8",
@@ -5737,7 +5737,7 @@
"BUILD_FLAVOUR": "validate",
"CABAL_INSTALL_VERSION": "3.14.2.0",
"CC": "cc",
- "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-iconv-includes=/usr/local/include --with-iconv-libraries=/usr/local/lib --with-system-libffi --with-ffi-includes=/usr/local/include --with-ffi-libraries=/usr/local/lib --with-gmp-includes=/usr/local/include --with-gmp-libraries=/usr/local/lib ",
"CXX": "c++",
"FETCH_GHC_VERSION": "9.10.3",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -5803,7 +5803,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_12-int_native-validate+fully_static",
"BROKEN_TESTS": "ghcilink002 linker_unload_native encoding004 T10458",
"BUILD_FLAVOUR": "validate+fully_static",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-alpine3_12-int_native-validate+fully_static",
@@ -5867,7 +5867,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_12-validate+fully_static",
"BROKEN_TESTS": "ghcilink002 linker_unload_native encoding004 T10458",
"BUILD_FLAVOUR": "validate+fully_static",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-alpine3_12-validate+fully_static",
@@ -5931,7 +5931,7 @@
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-validate",
"BROKEN_TESTS": "encoding004 T10458",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-ld-override ",
"INSTALL_CONFIGURE_ARGS": "--disable-ld-override --enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-alpine3_23-validate",
@@ -5994,7 +5994,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
"BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi",
"CROSS_STAGE": "2",
"CROSS_TARGET": "wasm32-wasi",
"FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
@@ -6061,7 +6061,7 @@
"BIGNUM_BACKEND": "native",
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-int_native-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
"BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
- "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp --with-system-libffi",
"CROSS_STAGE": "2",
"CROSS_TARGET": "wasm32-wasi",
"FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
@@ -6128,7 +6128,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-alpine3_23-wasm-unreg-cross_wasm32-wasi-release+host_fully_static+text_simdutf",
"BUILD_FLAVOUR": "release+host_fully_static+text_simdutf",
- "CONFIGURE_ARGS": "--enable-unregisterised --with-intree-gmp --with-system-libffi --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--enable-unregisterised --with-intree-gmp --with-system-libffi",
"CROSS_STAGE": "2",
"CROSS_TARGET": "wasm32-wasi",
"FIREFOX_LAUNCH_OPTS": "{\"browser\":\"firefox\",\"executablePath\":\"/usr/bin/firefox\"}",
@@ -6194,7 +6194,7 @@
"BIGNUM_BACKEND": "native",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-emsdk-closure-int_native-cross_javascript-unknown-ghcjs-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CONFIGURE_WRAPPER": "emconfigure",
"CROSS_STAGE": "2",
"CROSS_TARGET": "javascript-unknown-ghcjs",
@@ -6260,7 +6260,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb11-validate",
@@ -6323,7 +6323,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb11-validate+debug_info",
"BUILD_FLAVOUR": "validate+debug_info",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb11-validate+debug_info",
@@ -6386,7 +6386,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb12-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb12-validate",
@@ -6449,7 +6449,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-cross_aarch64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CROSS_EMULATOR": "qemu-aarch64 -L /usr/aarch64-linux-gnu",
"CROSS_STAGE": "2",
"CROSS_TARGET": "aarch64-linux-gnu",
@@ -6515,7 +6515,7 @@
"BIGNUM_BACKEND": "native",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-int_native-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-int_native-validate",
@@ -6579,7 +6579,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-no_tntc-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--disable-tables-next-to-code --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--disable-tables-next-to-code",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-no_tntc-validate",
@@ -6642,7 +6642,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-numa-slow-validate",
"BUILD_FLAVOUR": "slow-validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"ENABLE_NUMA": "1",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -6706,7 +6706,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": " --config perf_path=perf",
"TEST_ENV": "x86_64-linux-deb13-release",
@@ -6769,7 +6769,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-riscv-cross_riscv64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CROSS_EMULATOR": "qemu-riscv64 -L /usr/riscv64-linux-gnu",
"CROSS_STAGE": "2",
"CROSS_TARGET": "riscv64-linux-gnu",
@@ -6835,7 +6835,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-unreg-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-unregisterised --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--enable-unregisterised",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-unreg-validate",
@@ -6898,7 +6898,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-validate",
@@ -6961,7 +6961,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate+boot_nonmoving_gc",
"BUILD_FLAVOUR": "validate+boot_nonmoving_gc",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "--way=nonmoving --way=nonmoving_thr --way=nonmoving_thr_sanity",
"TEST_ENV": "x86_64-linux-deb13-validate+boot_nonmoving_gc",
@@ -7024,7 +7024,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate+llvm",
"BUILD_FLAVOUR": "validate+llvm",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-validate+llvm",
@@ -7088,7 +7088,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-validate+thread_sanitizer_cmm",
"BUILD_FLAVOUR": "validate+thread_sanitizer_cmm",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--docs=none",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -7153,7 +7153,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-deb13-zstd-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-ipe-data-compression --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--enable-ipe-data-compression",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-deb13-zstd-validate",
@@ -7216,7 +7216,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-fedora43-release",
@@ -7279,7 +7279,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-release",
"BUILD_FLAVOUR": "release",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--haddock-for-hackage",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -7343,7 +7343,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-fedora43-validate",
@@ -7406,7 +7406,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info",
"BUILD_FLAVOUR": "validate+debug_info",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-fedora43-validate+debug_info",
@@ -7469,7 +7469,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-fedora43-validate+debug_info+ubsan",
"BUILD_FLAVOUR": "validate+debug_info+ubsan",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"HADRIAN_ARGS": "--docs=none",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
@@ -7534,7 +7534,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-rocky8-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-rocky8-validate",
@@ -7597,7 +7597,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu22_04-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-ubuntu22_04-validate",
@@ -7660,7 +7660,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-loongarch-cross_loongarch64-linux-gnu-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--with-intree-gmp --enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "--with-intree-gmp",
"CROSS_EMULATOR": "qemu-loongarch64 -L /usr/loongarch64-linux-gnu",
"CROSS_STAGE": "2",
"CROSS_TARGET": "loongarch64-linux-gnu",
@@ -7726,7 +7726,7 @@
"BIGNUM_BACKEND": "gmp",
"BIN_DIST_NAME": "ghc-x86_64-linux-ubuntu24_04-validate",
"BUILD_FLAVOUR": "validate",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
"RUNTEST_ARGS": "",
"TEST_ENV": "x86_64-linux-ubuntu24_04-validate",
@@ -7785,7 +7785,7 @@
"BIN_DIST_NAME": "ghc-x86_64-windows-int_native-validate",
"BUILD_FLAVOUR": "validate",
"CABAL_INSTALL_VERSION": "3.14.2.0",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"FETCH_GHC_VERSION": "9.10.3",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
@@ -7848,7 +7848,7 @@
"BIN_DIST_NAME": "ghc-x86_64-windows-validate",
"BUILD_FLAVOUR": "validate",
"CABAL_INSTALL_VERSION": "3.14.2.0",
- "CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
+ "CONFIGURE_ARGS": "",
"FETCH_GHC_VERSION": "9.10.3",
"HADRIAN_ARGS": "--docs=no-sphinx-pdfs",
"INSTALL_CONFIGURE_ARGS": "--enable-strict-ghc-toolchain-check",
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9ae215596c5a6dd523a9da5e7960a17…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9ae215596c5a6dd523a9da5e7960a17…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/mangoiv/improve-linker-discovery] ci: disable strict toolchain check for now, revert this
by Magnus (@MangoIV) 30 Jul '26
by Magnus (@MangoIV) 30 Jul '26
30 Jul '26
Magnus pushed to branch wip/mangoiv/improve-linker-discovery at Glasgow Haskell Compiler / GHC
Commits:
96f2a18b by mangoiv at 2026-07-30T18:06:07+02:00
ci: disable strict toolchain check for now, revert this
- - - - -
1 changed file:
- .gitlab/generate-ci/gen_ci.hs
Changes:
=====================================
.gitlab/generate-ci/gen_ci.hs
=====================================
@@ -182,7 +182,7 @@ configureArgsStr bc = unwords $
++ ["--with-intree-gmp" | Just _ <- [crossTarget bc] ]
++ ["--with-system-libffi" | crossTarget bc == Just "wasm32-wasi" ]
++ ["--enable-ipe-data-compression" | withZstd bc ]
- ++ ["--enable-strict-ghc-toolchain-check"]
+ -- ++ ["--enable-strict-ghc-toolchain-check"]
-- Compute the hadrian flavour from the BuildConfig
mkJobFlavour :: BuildConfig -> Flavour
@@ -886,7 +886,7 @@ job arch opsys buildConfig = NamedJob { name = jobName, jobInfo = Job {..} }
, "BUILD_FLAVOUR" =: flavourString jobFlavour
, "BIGNUM_BACKEND" =: bignumString (bignumBackend buildConfig)
, "CONFIGURE_ARGS" =: configureArgsStr buildConfig
- , "INSTALL_CONFIGURE_ARGS" =: "--enable-strict-ghc-toolchain-check"
+ -- , "INSTALL_CONFIGURE_ARGS" =: "--enable-strict-ghc-toolchain-check"
, maybe mempty ("CONFIGURE_WRAPPER" =:) (configureWrapper buildConfig)
, maybe mempty ("CROSS_TARGET" =:) (crossTarget buildConfig)
, maybe mempty (("CROSS_STAGE" =:) . show) (crossStage buildConfig)
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/96f2a18bc51105808383500e04684e0…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/96f2a18bc51105808383500e04684e0…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc] Pushed new branch wip/torsten.schmits/mwb-26-01/unload
by Torsten Schmits (@torsten.schmits) 30 Jul '26
by Torsten Schmits (@torsten.schmits) 30 Jul '26
30 Jul '26
Torsten Schmits pushed new branch wip/torsten.schmits/mwb-26-01/unload at Glasgow Haskell Compiler / GHC
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/tree/wip/torsten.schmits/mwb-26-01/unl…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/mangoiv/improve-linker-discovery] configure: implement a saner linker discovery algorithm in dist/configure
by Magnus (@MangoIV) 30 Jul '26
by Magnus (@MangoIV) 30 Jul '26
30 Jul '26
Magnus pushed to branch wip/mangoiv/improve-linker-discovery at Glasgow Haskell Compiler / GHC
Commits:
9fd0f84e by mangoiv at 2026-07-30T17:02:08+02:00
configure: implement a saner linker discovery algorithm in dist/configure
- - - - -
9 changed files:
- distrib/configure.ac.in
- + m4/bindist_determine_linker.m4
- m4/find_merge_objects.m4
- utils/ghc-toolchain/exe/Main.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Lens.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Monad.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Tools/Cc.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Tools/Link.hs
- utils/ghc-toolchain/src/GHC/Toolchain/Utils.hs
Changes:
=====================================
distrib/configure.ac.in
=====================================
@@ -175,7 +175,11 @@ AC_SUBST([CmmCPPSupportsG0])
dnl ** Which ld to use?
dnl --------------------------------------------------------------
-FIND_LD([$target],[GccUseLdOpt])
+dnl currently if you pass $LD=foo, merge objs command will be set to $(which foo)
+dnl which is not required by GHC and also wrong.
+BINDIST_DETERMINE_LINKER([$target],[GccUseLdOpt])
+dnl at this point, we should have set LD in all cases, so FIND_MERGE_OBJECTS command can
+dnl go off and do it's thing
FIND_MERGE_OBJECTS()
CONF_GCC_LINKER_OPTS_STAGE1="$CONF_GCC_LINKER_OPTS_STAGE1 $GccUseLdOpt"
CONF_GCC_LINKER_OPTS_STAGE2="$CONF_GCC_LINKER_OPTS_STAGE2 $GccUseLdOpt"
@@ -427,6 +431,7 @@ checkMake380 make
checkMake380 gmake
# Toolchain target files
+USER_LD="$LD"
FIND_GHC_TOOLCHAIN_BIN([YES])
PREP_TARGET_FILE
FIND_GHC_TOOLCHAIN([.])
=====================================
m4/bindist_determine_linker.m4
=====================================
@@ -0,0 +1,133 @@
+# BINDIST_DETERMINE_LINKER
+# ------------------------
+#
+# This is used to determine the linker within the bindists configure
+#
+# Notes:
+# - usually, linking works by invoking $CC
+# - objects are merged using $LD directly
+# - $LD is a configure variable and is meaningless to $CC
+# - gcc only knows linker *flavours*, it cannot use paths
+# which means that the linker path should not be an absolute path
+# - clang konws --ld-path which means that it can be passed that
+# flag and also merge objs can be an absolute path
+#
+# Algorithm:
+# if $LD is set
+# then if $CC accepts --ld-path=$(which $LD)
+# then set --ld-path=$(which $LD), MergeObjsCommand=$(which $LD)
+# else if $CC accepts --fuse-ld=$LD ($LD is a linker flavour, not an absolute path)
+# then set -fuse-ld=$LD, MergeObjsCommand=$LD (not $(which ld))
+# else Reject with
+# "$LD is not compatible with $CC you chose. This means that $LD is either
+# an unsupported linker flavour or your $CC does not support absolute linker
+# paths"
+# else if --disable-ld-override is set or $target is macos
+# then if $CC accepts --ld-path=$(which ld)
+# then set --ld-path=$(which ld), set MergeObjsCommand=$(which ld)
+# else set *no* flag (equivalent to --fuse-ld=ld, if you will), set MergeObjsCommand=ld
+# else if $CC accepts --ld-path=$(which ld.lld)
+# then set --ld-path=$(which ld.lld), MergeObjsCommand=$(which ld.lld)
+# else if $CC accepts -fuse-ld=lld
+# then set -fuse-ld=lld, MergeObjsCommand=ld.lld
+# else set *no* flag (equivalent to --fuse-ld=ld), set MergeObjsCommand=ld
+#
+# $1 = the platform
+# $2 = the variable to set with GHC options to configure gcc to use the chosen linker
+#
+AC_DEFUN([BINDIST_DETERMINE_LINKER],[
+ AC_ARG_ENABLE(ld-override,
+ [AS_HELP_STRING([--disable-ld-override],
+ [Prevent GHC from overriding the default linker used by gcc. If ld-override is enabled GHC will try to tell gcc to use whichever linker is selected by the LD environment variable. [default=override enabled]])],
+ [],
+ [enable_ld_override=yes])
+
+ AC_REQUIRE([AC_PROG_CC])
+ AC_REQUIRE([AC_CANONICAL_TARGET])
+
+ check_ld_path() {
+ AC_MSG_CHECKING([whether C compiler supports --ld-path=[$]1])
+ ld_path="[$]1"
+ echo 'int main(void) { return 0; }' > conftest.c
+ if $CC -o conftest.o "--ld-path=$ld_path" $LDFLAGS conftest.c > /dev/null 2>&1
+ then
+ AC_MSG_RESULT([yes])
+ ld_path_ok=yes
+ else
+ AC_MSG_RESULT([no])
+ ld_path_ok=no
+ fi
+ rm -f conftest.c conftest.o
+ }
+
+ check_fuse_ld() {
+ AC_MSG_CHECKING([whether C compiler supports -fuse-ld=[$]1])
+ ld="[$]1"
+ echo 'int main(void) {return 0;}' > conftest.c
+ if $CC -o conftest.o -fuse-ld=[$]1 $LDFLAGS conftest.c > /dev/null 2>&1
+ then
+ AC_MSG_RESULT([yes])
+ fuse_ld_ok=yes
+ else
+ AC_MSG_RESULT([no])
+ fuse_ld_ok=no
+ fi
+ rm -f conftest.c conftest.o
+ }
+
+ try_set_linker_to() {
+ AC_MSG_CHECKING([whether linker can be set to [$]1])
+ tmp_ld=[$]1
+ ld_path_ok="no"
+ if test "z$tmp_ld" != "z" && check_ld_path "$tmp_ld" && test "x$ld_path_ok" = "xyes";
+ then $2="--ld-path=$tmp_ld"
+ AC_CHECK_TARGET_TOOL([LD], [$tmp_ld])
+ linker_set_successfully=yes
+ else # --ld-path does not work or $LD cannot be resolved to an absolute path
+ fuse_ld_ok=no
+ if check_fuse_ld "$tmp_ld" && test "x$fuse_ld_ok" = "xyes";
+ then $2="-fuse-ld=$tmp_ld"
+ AC_CHECK_TARGET_TOOL([LD], [$tmp_ld])
+ linker_set_successfully=yes
+ else AC_MSG_WARN(["$tmp_ld could not be set via either '--ld-path' or '-fuse-ld"])
+ linker_set_successfully=no
+ fi
+ fi
+ }
+
+ # we are lenient when $LD=ld and just act as if $LD wasn't set and
+ # enable-ld-override is off
+ if test "z$LD" != "z" && test "z$LD" != "zld";
+ then linker_set_successfully=no
+ try_set_linker_to "$LD"
+ if test "z$linker_set_successfully" != "zyes";
+ then AC_MSG_FAILURE([ $tmp_ld is an invalid linker. If your C compiler accepts the '--ld-path' flag,
+ \$LD can be either of an executable name that is in \$PATH *or* a path to an executable.
+ If your C compiler only supports the '--fuse-ld' flag, \$LD can only be one of the linker flavours supported
+ by it. Mind that if your C compiler supports '--ld-path', 'configure' will always prefer using an absolute path
+ to your linker as that is less error-prone.])
+ fi
+
+ else # $LD is not set -- we will do the ld-override non-sense
+ if test "x$enable_ld_override" = "xyes" && test "z$LD" != "zld" && case "$1" in
+ *-darwin) false ;; # don't do the ld override thing on macos
+ *) true ;;
+ esac;
+ then
+ AC_MSG_NOTICE(["enable ld override was set and no more specific linker was chosen by setting \$LD, trying to find best possible linker"])
+ try_set_linker_to "lld"
+ if test "z$linker_set_successfully" != "zyes";
+ then # ... bail out, just use ld in path
+ $2=""
+ AC_CHECK_TARGET_TOOL([LD], [ld])
+ fi
+ else # ld override is not set and $LD not set either
+ $2=""
+ AC_CHECK_TARGET_TOOL([LD], [ld])
+ fi
+ fi
+
+ AC_MSG_NOTICE([linker discovery set $2 set to $$2])
+
+ CHECK_LD_COPY_BUG([$1])
+])
=====================================
m4/find_merge_objects.m4
=====================================
@@ -22,7 +22,6 @@ AC_DEFUN([CHECK_MERGE_OBJECTS],[
])
AC_DEFUN([FIND_MERGE_OBJECTS],[
- AC_REQUIRE([FIND_LD])
if test -z ${MergeObjsCmd+x}; then
AC_MSG_NOTICE([Setting cmd])
=====================================
utils/ghc-toolchain/exe/Main.hs
=====================================
@@ -1,6 +1,8 @@
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE ViewPatterns #-}
module Main where
@@ -11,7 +13,7 @@ import System.Exit
import System.Console.GetOpt
import System.Environment
import System.FilePath ((</>))
-import qualified System.IO (readFile, writeFile)
+import qualified System.IO (writeFile, readFile')
import GHC.Platform.ArchOS
@@ -33,6 +35,10 @@ import GHC.Toolchain.Tools.MergeObjs
import GHC.Toolchain.Tools.Readelf
import GHC.Toolchain.NormaliseTriple (normaliseTriple)
import Text.Read (readMaybe)
+import System.IO (hPutStrLn, stderr)
+import Control.Exception (try, IOException, catch, displayException)
+import GHC.Stack (HasCallStack)
+import Data.Foldable (traverse_)
data Opts = Opts
{ optTriple :: Maybe String
@@ -72,6 +78,8 @@ data Opts = Opts
, optTablesNextToCode :: Maybe Bool
, optUseLibFFIForAdjustors :: Maybe Bool
, optLdOverride :: Maybe Bool
+ -- ^ whether or not to not use ld in $PATH and instead search for a
+ -- linker that GHC deems "better"
, optVerbosity :: Int
, optKeepTemp :: Bool
}
@@ -200,7 +208,7 @@ options =
[ enableDisable "unregisterised" "unregisterised backend" _optUnregisterised
, enableDisable "tables-next-to-code" "info-tables-next-to-code optimisation" _optTablesNextToCode
, enableDisable "libffi-adjustors" "the use of libffi for adjustors, even on platforms which have support for more efficient, native adjustor implementations." _optUseLibFFIForAdjustors
- , enableDisable "ld-override" "override gcc's default linker" _optLdOvveride
+ , enableDisable "ld-override" "search for a more efficient linker than your default linker" _optLdOvveride
, enableDisable "locally-executable" "the use of a target prefix which will be added to all tool names when searching for toolchain components" _optLocallyExecutable
, enableDisable "dwarf-unwind" "Enable DWARF unwinding support in the runtime system via elfutils' libdw" _optDwarfUnwind
] ++
@@ -280,12 +288,11 @@ options =
"The output path for the generated target toolchain configuration"
formatOpts :: [OptDescr (FormatOpts -> FormatOpts)]
-formatOpts = [
- (Option ['o'] ["output"] (ReqArg (set _formatOptOutput) "OUTPUT")
+formatOpts =
+ [ (Option ['o'] ["output"] (ReqArg (set _formatOptOutput) "OUTPUT")
"The output path for the formatted target toolchain configuration")
, (Option ['i'] ["input"] (ReqArg (set _formatOptInput) "INPUT")
- "The target file to format")
- ]
+ "The target file to format") ]
validateOpts :: Opts -> [String]
validateOpts opts = mconcat
@@ -297,30 +304,38 @@ main :: IO ()
main = do
argv <- getArgs
case argv of
- ("format": args) -> doFormat args
+ ("format" : args) -> doFormat args
_ -> doConfigure argv
-- The format mode is very useful for normalising paths and newlines on windows.
-doFormat :: [String] -> IO ()
+doFormat :: HasCallStack => [String] -> IO ()
doFormat args = do
let (opts0, _nonopts, errs) = getOpt RequireOrder formatOpts args
case errs of
[] -> do
let opts = foldr (.) id opts0 emptyFormatOpts
- tgtFile <- System.IO.readFile (view _formatOptInput opts)
- case readMaybe @Target tgtFile of
- Nothing -> error $ "Failed to read a valid Target value from " ++ view _formatOptInput opts ++ ":\n" ++ tgtFile
- Just tgt -> do
+ tgtFile <- try @IOException $ System.IO.readFile' (view _formatOptInput opts)
+ case tgtFile of
+ Right (readMaybe @Target -> Just tgt) -> do
let file = formatOptOutput opts
System.IO.writeFile file (show tgt)
+ `catch` \(e :: IOException) -> do
+ hPutStrLn stderr $ "Failed to write the formatted Target file to" ++ file ++ ". Writing caused the following IOException:\n"
+ ++ displayException e
+ Right contents -> do
+ hPutStrLn stderr $ "Failed to read a valid Target value from " ++ view _formatOptInput opts ++ "invalid file was:\n" ++ contents
+ exitWith (ExitFailure 1)
+ Left reason -> do
+ hPutStrLn stderr $ "Failed to read a valid Target value from " ++ view _formatOptInput opts ++ ", because an IOException occured:\n" ++ displayException reason
+ exitWith (ExitFailure 1)
_ -> do
- mapM_ putStrLn errs
- putStrLn $ usageInfo "ghc-toolchain" formatOpts
+ mapM_ (hPutStrLn stderr) errs
+ hPutStrLn stderr $ usageInfo "ghc-toolchain" formatOpts
exitWith (ExitFailure 1)
-doConfigure :: [String] -> IO ()
+doConfigure :: HasCallStack => [String] -> IO ()
doConfigure args = do
let (opts0, _nonopts, parseErrs) = getOpt RequireOrder options args
let opts = foldr (.) id opts0 emptyOpts
@@ -329,18 +344,22 @@ doConfigure args = do
let env = Env { verbosity = optVerbosity opts
, targetPrefix = case optTargetPrefix opts of
Just prefix -> Just prefix
+ -- TODO: why is this `fromMaybe (error _)`? that seems wrong (ah okay, because that would already mean that `errs` is not null; seems bad that we have this here though)
Nothing -> Just $ fromMaybe (error "undefined triple") (optTriple opts) ++ "-"
, keepTemp = optKeepTemp opts
, canLocallyExecute = fromMaybe True (optLocallyExecutable opts)
, logContexts = []
}
r <- runM env (run opts)
+ `catch` \(e :: IOException) -> pure $ Left [Error {errorLogContexts = [], errorMessage = displayException e}]
case r of
- Left err -> print err >> exitWith (ExitFailure 2)
+ Left errs -> do
+ traverse_ (hPutStrLn stderr . formatError) errs
+ exitWith (ExitFailure 1)
Right () -> return ()
errs -> do
- mapM_ putStrLn errs
- putStrLn $ usageInfo "ghc-toolchain" options
+ mapM_ (hPutStrLn stderr) errs
+ hPutStrLn stderr $ usageInfo "ghc-toolchain" options
exitWith (ExitFailure 1)
run :: Opts -> M ()
@@ -449,15 +468,15 @@ mkTarget opts = do
cc0 <- findBasicCc (optCc opts)
parseTriple cc0 normalised_triple
- cc0 <- findCc archOs tgtLlvmTarget (optCc opts)
+ cc <- findCc archOs tgtLlvmTarget (optCc opts)
cxx <- findCxx archOs tgtLlvmTarget (optCxx opts)
- cpp <- findCpp (optCpp opts) cc0
- hsCpp <- findHsCpp (optHsCpp opts) cc0
+ cpp <- findCpp (optCpp opts) cc
+ hsCpp <- findHsCpp (optHsCpp opts) cc
-- TODO: same case as ranlib below
-- TODO: we need it really only for javascript target (maybe wasm target as well)
- jsCpp <- Just <$> findJsCpp (optJsCpp opts) cc0
- cmmCpp <- findCmmCpp (optCmmCpp opts) cc0
- cc <- addPlatformDepCcFlags archOs cc0
+ jsCpp <- Just <$> findJsCpp (optJsCpp opts) cc
+ cmmCpp <- findCmmCpp (optCmmCpp opts) cc
+ ccWithPlatformFlags <- addPlatformDepCcFlags archOs cc
readelf <- optional $ findReadelf (optReadelf opts)
-- TODO: We could have
-- ranlib <- if arNeedsRanlib ar
@@ -466,11 +485,21 @@ mkTarget opts = do
-- but in order to match the configure output, for now we do
ranlib <- findRanlib (optRanlib opts)
ar <- findAr tgtVendor (optAr opts)
- ccLink <- findCcLink tgtLlvmTarget (optLd opts) (optCcLink opts) (ldOverrideWhitelist archOs && fromMaybe True (optLdOverride opts)) archOs cc readelf ar ranlib
-
+ ccLink <- findCcLink
+ tgtLlvmTarget
+ (optLd opts)
+ (optCcLink opts)
+ (ldOverrideWhitelist archOs
+ -- ld-override is enabled by default
+ && fromMaybe True (optLdOverride opts))
+ archOs
+ ccWithPlatformFlags
+ readelf
+ ar
+ ranlib
nm <- findNm (optNm opts)
- mergeObjs <- optional $ findMergeObjs (optMergeObjs opts) cc ccLink nm
+ mergeObjs <- optional $ findMergeObjs (optMergeObjs opts) ccWithPlatformFlags ccLink nm
when (isNothing mergeObjs && not (arSupportsDashL ar)) $
throwE "Neither a object-merging tool (e.g. ld -r) nor an ar that supports -L is available"
@@ -494,15 +523,15 @@ mkTarget opts = do
_ -> return (Nothing, Nothing)
-- various other properties of the platform
- tgtWordSize <- checkWordSize cc
- tgtEndianness <- checkEndianness cc
- tgtSymbolsHaveLeadingUnderscore <- checkLeadingUnderscore cc nm
- tgtSupportsSubsectionsViaSymbols <- checkSubsectionsViaSymbols archOs cc
- tgtSupportsIdentDirective <- checkIdentDirective cc
- tgtSupportsGnuNonexecStack <- checkGnuNonexecStack archOs cc
- tgtHasLibm <- checkTargetHasLibm cc
+ tgtWordSize <- checkWordSize ccWithPlatformFlags
+ tgtEndianness <- checkEndianness ccWithPlatformFlags
+ tgtSymbolsHaveLeadingUnderscore <- checkLeadingUnderscore ccWithPlatformFlags nm
+ tgtSupportsSubsectionsViaSymbols <- checkSubsectionsViaSymbols archOs ccWithPlatformFlags
+ tgtSupportsIdentDirective <- checkIdentDirective ccWithPlatformFlags
+ tgtSupportsGnuNonexecStack <- checkGnuNonexecStack archOs ccWithPlatformFlags
+ tgtHasLibm <- checkTargetHasLibm ccWithPlatformFlags
tgtRTSWithLibdw <- case optDwarfUnwind opts of
- Just True -> checkTargetHasLibdw cc (optLibdwIncludes opts) (optLibdwLibraries opts)
+ Just True -> checkTargetHasLibdw ccWithPlatformFlags (optLibdwIncludes opts) (optLibdwLibraries opts)
_ -> pure Nothing
-- code generator configuration
@@ -515,14 +544,14 @@ mkTarget opts = do
let prog = "int main(int argc, char** argv) { return 0; }"
via_c_args = ["-fwrapv", "-fno-builtin"]
forM_ via_c_args $ \arg -> checking ("support of "++arg) $ withTempDir $ \dir -> do
- let cc' = over (_ccProgram % _prgFlags) (++ [arg]) cc
+ let cc' = over (_ccProgram % _prgFlags) (++ [arg]) ccWithPlatformFlags
compileC cc' (dir </> "test.o") prog
return ()
let t = Target { tgtArchOs = archOs
, tgtVendor
, tgtLocallyExecutable = fromMaybe True (optLocallyExecutable opts)
- , tgtCCompiler = cc
+ , tgtCCompiler = ccWithPlatformFlags
, tgtCxxCompiler = cxx
, tgtCPreprocessor = cpp
, tgtHsCPreprocessor = hsCpp
=====================================
utils/ghc-toolchain/src/GHC/Toolchain/Lens.hs
=====================================
@@ -1,3 +1,4 @@
+{-# LANGUAGE DataKinds #-}
-- | A very simple Lens implementation
module GHC.Toolchain.Lens
( Lens(..)
@@ -7,11 +8,15 @@ module GHC.Toolchain.Lens
, (&)
) where
-import Prelude ((.), ($), (++))
+import Prelude ((.), ($), (++), Monoid, (<>))
import Data.Function ((&))
+import GHC.Records
data Lens a b = Lens { view :: (a -> b), set :: (b -> a -> a) }
+instance HasField "over" (Lens a b) ((b -> b) -> a -> a) where
+ getField = over
+
(%) :: Lens a b -> Lens b c -> Lens a c
a % b = Lens { view = view b . view a
, set = \y x -> set a (set b y (view a x)) x
=====================================
utils/ghc-toolchain/src/GHC/Toolchain/Monad.hs
=====================================
@@ -1,5 +1,6 @@
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE DerivingVia #-}
+{-# LANGUAGE NamedFieldPuns #-}
module GHC.Toolchain.Monad
( Env(..)
@@ -21,6 +22,10 @@ module GHC.Toolchain.Monad
, logDebug
, checking
, withLogContext
+
+ -- * Errors
+ , Error (..)
+ , formatError
) where
import Prelude hiding (readFile, writeFile, appendFile)
@@ -63,6 +68,9 @@ data Error = Error { errorMessage :: String
}
deriving (Show)
+formatError :: Error -> String
+formatError Error {errorMessage, errorLogContexts} = unlines $ errorMessage : errorLogContexts
+
throwE :: String -> M a
throwE msg = throwEs [msg]
=====================================
utils/ghc-toolchain/src/GHC/Toolchain/Tools/Cc.hs
=====================================
@@ -1,5 +1,6 @@
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE ViewPatterns #-}
+{-# LANGUAGE MultiWayIf #-}
module GHC.Toolchain.Tools.Cc
( Cc(..)
@@ -23,6 +24,7 @@ import GHC.Platform.ArchOS
import GHC.Toolchain.Prelude
import GHC.Toolchain.Utils
import GHC.Toolchain.Program
+import System.Exit (ExitCode(..))
newtype Cc = Cc { ccProgram :: Program
}
@@ -109,11 +111,12 @@ checkCcSupportsExtraViaCFlags cc = checking "whether cc supports extra via-c fla
, "-fwrapv", "-fno-builtin"
, "-Werror", "-x", "c"
, "-o", test_o, test_c]
- when (not (isSuccess code)
- || "unrecognized" `isInfixOf` out
- || "unrecognized" `isInfixOf` err
- ) $
- throwE "Your C compiler must support the -fwrapv and -fno-builtin flags"
+
+ if | ExitSuccess <- code
+ , not $ "unrecognized" `isInfixOf` out
+ , not $ "unrecognized" `isInfixOf` err
+ -> pure ()
+ | otherwise -> throwE "Your C compiler must support the -fwrapv and -fno-builtin flags"
-- | Preprocess the given program.
preprocess
=====================================
utils/ghc-toolchain/src/GHC/Toolchain/Tools/Link.hs
=====================================
@@ -1,7 +1,8 @@
-{-# OPTIONS_GHC -Wno-name-shadowing #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE CPP #-}
+{-# LANGUAGE MultiWayIf #-}
+{-# LANGUAGE OverloadedRecordDot #-}
module GHC.Toolchain.Tools.Link ( CcLink(..), findCcLink ) where
@@ -18,6 +19,8 @@ import GHC.Toolchain.Tools.Cc
import GHC.Toolchain.Tools.Ar
import GHC.Toolchain.Tools.Ranlib
import GHC.Toolchain.Tools.Readelf
+import System.Exit (ExitCode(..))
+import Control.Applicative
-- | Configuration on how the C compiler can be used to link
data CcLink = CcLink { ccLinkProgram :: Program
@@ -47,61 +50,97 @@ instance Show CcLink where
_ccLinkProgram :: Lens CcLink Program
_ccLinkProgram = Lens ccLinkProgram (\x o -> o{ccLinkProgram=x})
-findCcLink :: String -- ^ The llvm target to use if CcLink supports --target
- -> ProgOpt
- -> ProgOpt
- -> Bool -- ^ Whether we should search for a more efficient linker
- -> ArchOS -> Cc -> Maybe Readelf -> Ar -> Ranlib -> M CcLink
-findCcLink target ld progOpt ldOverride archOs cc readelf ar ranlib = checking "for C compiler for linking command" $ do
+-- | tries to add flags to the c compiler to run as a linker
+findCcLink :: String -- ^ The llvm target to use if CcLink supports --target
+ -> ProgOpt -- ^ The contents of $LD
+ -> ProgOpt -- ^ The c compiler intended for invoking the linker
+ -> Bool -- ^ Whether GHC should disregard ld and search for a linker it considers better
+ -> ArchOS
+ -> Cc -- ^ the c compiler used for compiling c programs, used as a fallback
+ -> Maybe Readelf -> Ar -> Ranlib -> M CcLink
+findCcLink target ld progOpt userLdOverride archOs cc readelf ar ranlib = checking "for C compiler for linking command" $ do
-- Use the specified linker or try using the C compiler
rawCcLink <- findProgram "C compiler for linking" progOpt [] <|> pure (programFromOpt progOpt (prgPath $ ccProgram cc) [])
- -- See #23857 for why we check to see if LD is set here
- -- TLDR: If the user explicitly sets LD then in ./configure
- -- we don't perform a linker search (and set -fuse-ld), so
- -- we do the same here for consistency.
- ccLinkProgram <- case (poPath ld, poFlags progOpt) of
- (_, Just _) ->
- -- If the user specified linker flags don't second-guess them
- pure rawCcLink
- (Just {}, _) ->
- pure rawCcLink
- _ -> do
- -- If not then try to find decent linker flags
- findLinkFlags ldOverride cc rawCcLink <|> pure rawCcLink
- ccLinkProgram <- linkSupportsTarget archOs cc target ccLinkProgram
- ccLinkSupportsNoPie <- checkSupportsNoPie cc ccLinkProgram
- ccLinkSupportsCompactUnwind <- checkSupportsCompactUnwind archOs cc ccLinkProgram
- ccLinkSupportsFilelist <- checkSupportsFilelist cc ccLinkProgram
- ccLinkSupportsSingleModule <- checkSupportsSingleModule archOs cc ccLinkProgram
- ccLinkIsGnu <- checkLinkIsGnu archOs ccLinkProgram
- checkBfdCopyBug archOs cc readelf ccLinkProgram
- ccLinkProgram <- addPlatformDepLinkFlags archOs cc ccLinkProgram
- ccLinkSupportsVerbatimNamespace <- linkSupportsVerbatimNamespace cc ar ranlib ccLinkProgram
- let ccLink = CcLink {ccLinkProgram, ccLinkSupportsNoPie,
- ccLinkSupportsCompactUnwind, ccLinkSupportsFilelist,
- ccLinkSupportsSingleModule, ccLinkIsGnu, ccLinkSupportsVerbatimNamespace}
- ccLink <- linkRequiresNoFixupChains archOs cc ccLink
- ccLink <- linkRequiresNoWarnDuplicateLibraries archOs cc ccLink
- return ccLink
-
-
--- | Try to convince @cc@ to use a more efficient linker than @bfd.ld@
-findLinkFlags :: Bool -> Cc -> Program -> M Program
-findLinkFlags enableOverride cc ccLink
- | enableOverride && doLinkerSearch =
- oneOf "this can't happen"
- [ -- Annoyingly, gcc silently falls back to vanilla ld (typically bfd
- -- ld) if @-fuse-ld@ is given with a non-existent linker.
- -- Consequently, we must first check that the desired ld
- -- executable exists before trying cc.
- do _ <- findProgram (linker ++ " linker") emptyProgOpt ["ld."++linker]
- prog <$ checkLinkWorks cc prog
- | linker <- ["lld", "bfd"]
- , let prog = over _prgFlags (++["-fuse-ld="++linker]) ccLink
- ]
- <|> (ccLink <$ checkLinkWorks cc ccLink)
- | otherwise =
- return ccLink
+ ccLinkProgram <- if
+ -- A cc with linker was already specified, don't doubt the user's proficiency,
+ -- autonomy and right to segmentation faults
+ | Just _ <- progOpt.poFlags -> pure rawCcLink
+ -- we get a $LD; now figure out how to pass it to the $CC
+ | Just ldPathOrFlavour <- ld.poPath
+ -- even though $LD=ld doesn't really mean anything to C compilers,
+ -- we are lenient and just act as if $LD wasn't set and enable-ld-override
+ -- is off
+ , ldPathOrFlavour /= "ld" -> do
+ flip oneOf'
+
+ [ do
+ -- first check if the c compiler supports --ld-path, which goes best with $LD
+ ldPath <- findProgram (ldPathOrFlavour <> " linker") emptyProgOpt $ tryLdPrefix [ldPathOrFlavour]
+ -- findProgram takes a userSpec but in our case this is emptyProgOpt, so we just
+ -- extract the path that it found and ignore the (empty) arguments
+ checkLink rawCcLink [ fLdPath ldPath.prgPath ]
+ , -- second, check if the c compiler instead understands -fuse-ld (linker "flavour");
+ -- do not try to expand the path first since absolute paths are not valid linker flavours
+ checkLink rawCcLink [ fUseLd ldPathOrFlavour] ]
+
+ -- $LD was set but we couldn't figure out how to pass it to $CC. This is a hard failure,
+ -- we report it.
+ [ ldPathOrFlavour <> " is an invalid linker."
+ , "$LD can be either of an executable name that is in $PATH *or* a"
+ <> " path to an executable."
+ , "If your C compiler only supports the '-fuse-ld' flag, $LD can"
+ <> " only be one of the linker flavours supported by it."
+ , "Mind that if your C compiler supports '--ld-path', 'configure'"
+ <> " will always prefer using an absolute path to your linker as"
+ <> " that is less error-prone." ]
+
+ -- $LD is not set or $LD=ld (see above)
+ -- Try to convince @cc@ to use a more efficient linker than @bfd.ld@
+ | let ldOverride
+ | Just "ld" <- ld.poPath = False
+ | otherwise = userLdOverride
+ , ldOverride ->
+ asum
+ [ -- Annoyingly, gcc silently falls back to vanilla ld
+ -- if @-fuse-ld@ is given passed a non-existent linker.
+ -- Consequently, we must first check that the desired ld
+ -- executable exists before trying cc.
+ do linkerPath <- findProgram (linker ++ " linker") emptyProgOpt [ linker ]
+ checkLink rawCcLink [ fLdPath linkerPath.prgPath]
+ <|> checkLink rawCcLink [ fUseLd linker]
+ | linker <- tryLdPrefix ["lld", "bfd"]
+ ]
+ -- fall back to raw ld
+ <|> checkLink rawCcLink []
+
+ -- we can't help the user
+ | otherwise -> checkLink rawCcLink []
+
+ targetedCcLink <- linkSupportsTarget archOs cc target ccLinkProgram
+ ccLinkSupportsNoPie <- checkSupportsNoPie cc targetedCcLink
+ ccLinkSupportsCompactUnwind <- checkSupportsCompactUnwind archOs cc targetedCcLink
+ ccLinkSupportsFilelist <- checkSupportsFilelist cc targetedCcLink
+ ccLinkSupportsSingleModule <- checkSupportsSingleModule archOs cc targetedCcLink
+ ccLinkIsGnu <- checkLinkIsGnu archOs targetedCcLink
+ checkedCcLink <- addPlatformDepLinkFlags archOs cc targetedCcLink
+ ccLinkSupportsVerbatimNamespace <- linkSupportsVerbatimNamespace cc ar ranlib checkedCcLink
+
+ checkBfdCopyBug archOs cc readelf targetedCcLink
+
+ let finalCcLink = CcLink
+ { ccLinkProgram = checkedCcLink, ccLinkSupportsNoPie
+ , ccLinkSupportsCompactUnwind, ccLinkSupportsFilelist
+ , ccLinkSupportsSingleModule, ccLinkIsGnu, ccLinkSupportsVerbatimNamespace }
+
+ linkRequiresNoFixupChains archOs cc finalCcLink
+ >>= linkRequiresNoWarnDuplicateLibraries archOs cc
+ where
+ checkLink ccLink extraFlags =
+ let prog = over _prgFlags (extraFlags <>) ccLink
+ in prog <$ checkLinkWorks cc prog
+ tryLdPrefix progs = [id, ("ld." <>)] <*> progs
+ fUseLd flavour = "-fuse-ld=" <> flavour
+ fLdPath path = "--ld-path=" <> path
-- | Test whether the linker supports the verbatim '-l:libfoo.a' syntax, allowing
-- us better control over partial static linking.
@@ -150,20 +189,6 @@ linkSupportsTarget archOs cc target link =
checking "whether cc linker supports --target" $
supportsTarget archOs (Lens id const) (checkLinkWorks cc) target link
--- | Should we attempt to find a more efficient linker on this platform?
---
--- N.B. On Darwin it is quite important that we use the system linker
--- unchanged as it is very easy to run into broken setups (e.g. unholy mixtures
--- of Homebrew and the Apple toolchain).
---
--- See #21712.
-doLinkerSearch :: Bool
-#if defined(linux_HOST_OS)
-doLinkerSearch = True
-#else
-doLinkerSearch = False
-#endif
-
-- | See Note [No PIE when linking] in GHC.Driver.Session
checkSupportsNoPie :: Cc -> Program -> M Bool
checkSupportsNoPie cc ccLink = checking "whether the cc linker supports -no-pie" $
@@ -174,7 +199,11 @@ checkSupportsNoPie cc ccLink = checking "whether the cc linker supports -no-pie"
-- Check output as some GCC versions only warn and don't respect -Werror
-- when passed an unrecognized flag.
(code, out, err) <- readProgram ccLink ["-no-pie", "-Werror", test_o, "-o", test]
- return (isSuccess code && not ("unrecognized" `isInfixOf` out) && not ("unrecognized" `isInfixOf` err))
+ return if
+ | ExitSuccess <- code
+ , not ("unrecognized" `isInfixOf` out)
+ , not ("unrecognized" `isInfixOf` err) -> True
+ | otherwise -> False
-- ROMES:TODO: This check is wrong here and in configure because with ld.gold parses "-n" "o_compact_unwind"
-- TODO:
@@ -191,7 +220,8 @@ checkSupportsCompactUnwind archOs cc ccLink
compileC cc test_o "int foo() { return 0; }"
exitCode <- runProgram ccLink ["-r", "-Wl,-no_compact_unwind", "-o", test2_o, test_o]
- return $ isSuccess exitCode
+ return if | ExitSuccess <- exitCode -> True
+ | otherwise -> False
| otherwise = return False
checkSupportsFilelist :: Cc -> Program -> M Bool
@@ -210,7 +240,8 @@ checkSupportsFilelist cc ccLink = checking "whether the cc linker understands -f
exitCode <- runProgram ccLink ["-r", "-Wl,-filelist", test_ofiles, "-o", test_o]
- return (isSuccess exitCode)
+ return if | ExitSuccess <- exitCode -> True
+ | otherwise -> False
-- | Check that the (darwin) linker supports @-single_module@.
--
=====================================
utils/ghc-toolchain/src/GHC/Toolchain/Utils.hs
=====================================
@@ -7,19 +7,18 @@ module GHC.Toolchain.Utils
, withTempDir
, oneOf
, oneOf'
- , isSuccess
, lastLine
, findM
) where
-import Control.Exception
+import Control.Applicative (asum)
+import Control.Exception ( throwIO, bracket, try )
import Control.Monad
import Control.Monad.IO.Class
import Data.List (unsnoc)
import System.Directory
import System.FilePath
import System.IO.Error
-import System.Exit
import GHC.Toolchain.Prelude
@@ -61,12 +60,7 @@ oneOf err = oneOf' [err]
-- | Like 'oneOf' but takes a multi-line error message if none of the checks
-- succeed.
oneOf' :: [String] -> [M b] -> M b
-oneOf' err = foldr (<|>) (throwEs err)
-
-isSuccess :: ExitCode -> Bool
-isSuccess = \case
- ExitSuccess -> True
- ExitFailure _ -> False
+oneOf' err as = asum $ as <> [throwEs err]
lastLine :: String -> String
lastLine = maybe "" snd . unsnoc . lines
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9fd0f84ec49c0ec5c92475bf3edc89c…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/9fd0f84ec49c0ec5c92475bf3edc89c…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/sjakobi/T16720] 2 commits: testsuite: Note that dropping redundant output also affects the JUnit report
by Simon Jakobi (@sjakobi) 30 Jul '26
by Simon Jakobi (@sjakobi) 30 Jul '26
30 Jul '26
Simon Jakobi pushed to branch wip/sjakobi/T16720 at Glasgow Haskell Compiler / GHC
Commits:
0cc5a523 by Simon Jakobi at 2026-07-30T16:40:43+02:00
testsuite: Note that dropping redundant output also affects the JUnit report
The mismatching stream is dropped from the TestResult at construction, so
the JUnit XML now carries only the diff where it previously also had the
raw stream. Record in Note [Redundant output in test results] that this
is intended, and switch the Note to the usual comment style.
Assisted-by: Claude Fable 5
- - - - -
997fbe2e by Simon Jakobi at 2026-07-30T16:45:27+02:00
testsuite: Don't crash on non-UTF-8 test output in failure results
read_stdout, read_stderr_for and read_comp_stderr decoded with strict
UTF-8, so a test emitting invalid UTF-8 (binary output, or a crash
truncating a multi-byte character) raised UnicodeDecodeError and was
reported as a framework failure. Newly reachable from the bad-exit-code
branch of simple_run, which now attaches the captured output to the
result even under -v0 and for expect-fail ways.
Decode with errors='replace', like read_no_crs and safe_print.
Assisted-by: Claude Fable 5
- - - - -
1 changed file:
- testsuite/driver/testlib.py
Changes:
=====================================
testsuite/driver/testlib.py
=====================================
@@ -2651,7 +2651,7 @@ async def stdout_ok(name: TestName, way: WayName) -> CompareOutput:
def read_stdout( name: TestName ) -> str:
path = in_testdir(name, 'run.stdout')
if path.exists():
- return path.read_text(encoding='UTF-8')
+ return path.read_text(encoding='UTF-8', errors='replace')
else:
return ''
@@ -2681,14 +2681,14 @@ async def stderr_ok(name: TestName, way: WayName) -> CompareOutput:
def read_comp_stderr( name: TestName ) -> str:
path = in_testdir(name, 'comp.stderr')
if path.exists():
- return path.read_text(encoding='UTF-8')
+ return path.read_text(encoding='UTF-8', errors='replace')
else:
return ''
def read_stderr_for( phase: str, name: TestName ) -> str:
path = in_testdir(name, phase + '.stderr')
if path.exists():
- return path.read_text(encoding='UTF-8')
+ return path.read_text(encoding='UTF-8', errors='replace')
else:
return ''
@@ -3692,20 +3692,21 @@ MAX_SUMMARY_OUTPUT_LINES = 100
# would drown out the summary.
MAX_SUMMARY_OUTPUT_TESTS = 20
-"""
-Note [Redundant output in test results]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-A failing test result carries up to three pieces of output: `diff`, `stdout`
-and `stderr`. For an output mismatch these overlap: the diff's `+` lines are
-the very stream that mismatched, normalised. Reporting both would print the
-same text twice, so the mismatching stream is dropped at the call sites in
-favour of the diff, which additionally shows what was expected. The *other*
-stream is kept: on a stdout mismatch, stderr is independent context.
-
-The drop is conditional on there being a diff at all: compare_outputs only
-runs `diff` when config.verbose >= 1, so under -v0 the stream is the only
-output there is.
-"""
+# Note [Redundant output in test results]
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# A failing test result carries up to three pieces of output: `diff`, `stdout`
+# and `stderr`. For an output mismatch these overlap: the diff's `+` lines are
+# the very stream that mismatched, normalised. Reporting both would print the
+# same text twice, so the mismatching stream is dropped at the call sites in
+# favour of the diff, which additionally shows what was expected. The *other*
+# stream is kept: on a stdout mismatch, stderr is independent context.
+#
+# The drop is conditional on there being a diff at all: compare_outputs only
+# runs `diff` when config.verbose >= 1, so under -v0 the stream is the only
+# output there is.
+#
+# Note that, since the drop happens at result construction, it also affects the
+# JUnit report (junit.py).
def strip_diff_header(diff: Optional[str]) -> Optional[str]:
# Drop diff(1)'s ---/+++ lines: they name normalised files in the test
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3647ba9bb729f2f56f3c5da2da2a61…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/3647ba9bb729f2f56f3c5da2da2a61…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/romes/27461] Organize and clean-up GHC.Driver.Downsweep
by Hannes Siebenhandl (@fendor) 30 Jul '26
by Hannes Siebenhandl (@fendor) 30 Jul '26
30 Jul '26
Hannes Siebenhandl pushed to branch wip/romes/27461 at Glasgow Haskell Compiler / GHC
Commits:
5bfee53a by Rodrigo Mesquita at 2026-07-30T10:28:39+02:00
Organize and clean-up GHC.Driver.Downsweep
Simply some cosmetic changes, moving definitions around to structure the
module better into its relevant sections
(In go (ns ++ ss), it's not a problem to use ++ because it's a good
producer and we won't have to append fully before processing the next
item in go)
- - - - -
4 changed files:
- + changelog.d/downsweep-refactor
- compiler/GHC/Driver/Downsweep.hs
- compiler/GHC/Driver/Env.hs
- compiler/GHC/Unit/Env.hs
Changes:
=====================================
changelog.d/downsweep-refactor
=====================================
@@ -0,0 +1,9 @@
+section: compiler
+synopsis: Significantly improve the performance of downsweep
+issues: #27461
+mrs: !16330
+description: {
+ Rewrite the downsweep pass to make the control flow clearer and fix the
+ caching strategy. Allocations during downsweep in multi-home-unit-heavy and
+ module-heavy tests are reduced by -30% to -60%
+}
=====================================
compiler/GHC/Driver/Downsweep.hs
=====================================
@@ -5,8 +5,8 @@
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE BlockArguments #-}
{-# LANGUAGE ViewPatterns #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE FunctionalDependencies #-}
+
+-- | See Note [The ModuleGraph]
module GHC.Driver.Downsweep
( downsweep
, downsweepThunk
@@ -117,17 +117,35 @@ import Data.IORef
import qualified Data.List.NonEmpty as NE
{-
-Note [Downsweep and the ModuleGraph]
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Note [The ModuleGraph]
+~~~~~~~~~~~~~~~~~~~~~~
+The 'ModuleGraph' stores the relationship between all the modules, units, and
+instantiations in the current session, allowing e.g. to answer questions about
+the transitive closure of the imports.
+
+* A /node/ of the `ModuleGraph`, of type `ModuleGraphNode`, corresponds
+ 1-1 with a home-package module of source code, N.hs or N.hs-boot.
+ See the haddocks of `ModuleGraphNode`.
+
+ The `ModuleNodeInfo` field of the `ModuleGraphNode` contains a `ModSummary`
+ that in turn describes where the source file is (its `ModLocation`), when it
+ was read, its contents etc. See Note [Module Types in the ModuleGraph].
+
+ Each node has a distinct `NodeKey` (an instance of Ord); the function
+ mkNodeKey :: ModuleGraphNode -> NodeKey
+ get the `NodeKey` of a node
-The ModuleGraph stores the relationship between all the modules, units, and
-instantiations in the current session.
+* An /edge/ of the `ModuleGraph` from N1 to N2 typically corresponds to a
+ direct import of module N2 in module N1: one edge for each import.
+ Imports of modules from non-home-packages are featured in the `ModuleGraph`
+ as `UnitNode`s, or `InstantiationNodes` when backpack is involved.
-When we do downsweep, we build up a new ModuleGraph, starting from the root
-modules. By following all the dependencies we construct a graph which allows
-us to answer questions about the transitive closure of the imports.
+ Each node contains a list of all its out-edges or, more precisely, of the
+ `NodeKey`s of its direct dependencies.
-The module graph is accessible in the HscEnv.
+Because a node in the `ModuleGraph` describes the precise dependencies of the module, each node has its
+own `UnitId`. Remember, a single module can be compiled against many different versions of a library; but
+once we fix its dependencies we can compile it, and give it a `UnitId`. See Note [About units] in GHC.Unit.
When is this graph constructed?
@@ -144,10 +162,54 @@ When is this graph constructed?
The result is having a uniform graph available for the whole compilation pipeline.
-See also Note [Downsweep Control Flow and Caching]
+See Note [Downsweep Control Flow and Caching] for implementation details of
+the algorithm and caching.
+
+Note [Downsweep: building and maintaining the module graph]
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+The module graph can be built from scratch by starting from a set of /root nodes/
+and exploring their dependencies. This is done by `GHC.Driver.Downsweep.downsweep`.
+
+Another scenario is when we already /have/ a `ModuleGraph` and want to update
+it (e.g. to reflect any file-system changes that have taken place since the
+last invocation of `downsweep`) or augment it by exploring new roots (e.g. for
+incrementally constructing a ModuleGraph using the GHC API; See #27054). So
+`downsweep` takes a `Maybe ModuleGraph` as one of its arguments.
+
+Downsweep iteratively *expands* each so-called 'DownsweepNode' into a list of
+its dependencies, and recursively traverses all reachable nodes in a
+depth-first order using 'dfsBuild'. A 'DownsweepNode' is *expanded* by 'dsNodeExpand':
+
+ dsNodeExpand :: DownsweepNode -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
+
+Most notably:
+
+ - 'DSMod' (Module-based) nodes can be expanded by preprocessing and
+ parsing the module header, then listing the imports (direct and SOURCE imports)
+ (see 'expandModuleSummary' and 'expandFixedModuleNode')
+
+ - 'DSUnit' is expanded by finding the unit dependencies of that unit by id
+ (see 'expandUnitNode').
+
+Besides its dependencies, expanding a 'DownsweepNode' produces a
+'ModuleGraphNode'. The final 'ModuleGraph' is constructed from the list of
+'ModuleGraphNode's accumulated by expanding all reachable 'DownsweepNode's.
+
+A 'ModuleGraphNode' is essentially the resolved version of 'DownsweepNode':
+it records the payload (e.g. a Module) *and* its dependencies, unlike
+'DownsweepNode' which has the just the payload that is used as a seed (and
+potentially some context information, like the current home-unit)
+
+TL;DR: We recursively traverse 'DownsweepNodes' to discover and build the 'ModuleGraph'.
+
+See also Note [Downsweep Control Flow and Caching] for implementation details.
+See Note [The ModuleGraph] for an overview when we do downsweep.
-}
-----------------------------------------------------------------------------
+-- * Top-level entry to downsweep
+-----------------------------------------------------------------------------
+
--
-- | Downsweep (dependency analysis) for --make mode
--
@@ -159,7 +221,7 @@ See also Note [Downsweep Control Flow and Caching]
-- cache to avoid recalculating a module summary if the source is
-- unchanged.
--
--- Downsweeping can start from scratch for from a given module graph. In the
+-- Downsweeping can start from scratch or from a given module graph. In the
-- latter case, the given graph is fully included in the resulting graph, even
-- if parts of it are not reachable from any of the given roots. When an import
-- is processed, the source of the imported module is not consulted if this
@@ -175,6 +237,8 @@ See also Note [Downsweep Control Flow and Caching]
--
-- It will also turn on code generation for any modules that need it by calling
-- 'enableCodeGenForTH'.
+--
+-- See also Note [The ModuleGraph]
downsweep :: HscEnv
-> (GhcMessage -> AnyGhcDiagnostic)
-> Maybe Messager
@@ -231,6 +295,35 @@ downsweep hsc_env diag_wrapper msg old_summaries maybe_base_graph excl_mods allo
unitModuleNodes summaries uid hue =
maybeToList (linkNodes summaries uid hue)
+ -- The linking plan for each module. If we need to do linking for a home unit
+ -- then this function returns a graph node which depends on all the modules in the home unit.
+
+ -- At the moment nothing can depend on these LinkNodes.
+ linkNodes :: [ModuleGraphNode] -> UnitId -> HomeUnitEnv -> Maybe (Either (Messages DriverMessage) ModuleGraphNode)
+ linkNodes summaries uid hue =
+ let dflags = homeUnitEnv_dflags hue
+ ofile = outputFile_ dflags
+
+ unit_nodes :: [NodeKey]
+ unit_nodes = map mkNodeKey (filter ((== uid) . mgNodeUnitId) summaries)
+ -- Issue a warning for the confusing case where the user
+ -- said '-o foo' but we're not going to do any linking.
+ -- We attempt linking if either (a) one of the modules is
+ -- called Main, or (b) the user said -no-hs-main, indicating
+ -- that main() is going to come from somewhere else.
+ --
+ no_hs_main = gopt Opt_NoHsMain dflags
+
+ main_sum = any (== NodeKey_Module (ModNodeKeyWithUid (GWIB (mainModuleNameIs dflags) NotBoot) uid)) unit_nodes
+
+ do_linking = main_sum || no_hs_main || ghcLink dflags == LinkDynLib || ghcLink dflags == LinkStaticLib || ghcLink dflags == LinkBytecodeLib
+
+ in if | isExecutableLink (ghcLink dflags) && isJust ofile && not do_linking ->
+ Just (Left $ singleMessage $ mkPlainErrorMsgEnvelope noSrcSpan (DriverRedirectedNoMain $ mainModuleNameIs dflags))
+ -- This should be an error, not a warning (#10895).
+ | ghcLink dflags /= NoLink, do_linking -> Just (Right (LinkNode unit_nodes uid))
+ | otherwise -> Nothing
+
-- | Calculate the module graph starting from a single ModSummary. The result is a
-- thunk, which when forced will perform the downsweep. This is useful in oneshot
-- mode where the module graph may never be needed.
@@ -322,7 +415,35 @@ downsweepInstalledModules hsc_env mods = do
return (mkModuleGraph mg)
+-----------------------------------------------------------------------------
+-- * Orchestrator: downsweepFromRootNodes
+-----------------------------------------------------------------------------
+
+type ModSummaryCache = IORef ModSummaryCacheMap
+type ImportsCache = IORef ImportsCacheMap
+
+-- | A cache from file paths to the already summarised modules. The same file
+-- can be used in multiple units so the map is actually also keyed by which
+-- unit the file was used in.
+--
+-- We want to reuse ModSummaries as far as possible because the most expensive
+-- part of downsweep is reading and parsing the headers.
+--
+-- See Note [Downsweep Control Flow and Caching]
+type ModSummaryCacheMap
+ -- The cache can't be keyed by 'Module' because that isn't sufficient to
+ -- distinguish .hs from .hs-boot files. Use path+unit instead.
+ = ( M.Map (UnitId, OsPath) (Either DriverMessages (ModSummary, SummProvenance)) )
+-- | A 'ModSummary's provenance during downsweep: an old previously constructed
+-- ModSummary, that might be potentially outdated, or a freshly constructed one
+-- during this downsweep which is certainly up to date?
+data SummProvenance
+ -- | Constructed during this downsweep: trivially up to date
+ = SummFresh
+ -- | Carried over from a previous run: may be stale, must be hash-checked
+ -- (and considered by -fforce-recomp)
+ | SummOld
-- | Whether downsweep should use compiler or fixed nodes. Compile nodes are used
-- by --make mode, and fixed nodes by oneshot mode.
@@ -381,20 +502,15 @@ downsweepFromRootNodes hsc_env summ_cache imps_cache maybe_base_graph excl_mods
[ ((moduleNodeInfoUnitId s, moduleNodeInfoMnwib s), [s])
| s <- root_nodes ]
- moduleGraphNodeMap :: ModuleGraph -> M.Map NodeKey (MGRes ModuleGraphNode)
+ moduleGraphNodeMap :: ModuleGraph -> M.Map NodeKey (NodeRes ModuleGraphNode)
moduleGraphNodeMap graph
= M.fromList [(mkNodeKey node, NSuccess node) | node <- mgModSummaries' graph]
sec = initSourceErrorContext (hsc_dflags hsc_env)
-calcDeps :: ModSummary -> [(ImportLevel, PkgQual, GenWithIsBoot (Located ModuleName))]
-calcDeps ms =
- -- Add a dependency on the HsBoot file if it exists
- -- This gets passed to the loopImports function which just ignores it if it
- -- can't be found.
- [(NormalLevel, NoPkgQual, GWIB (noLoc $ ms_mod_name ms) IsBoot) | NotBoot <- [isBootSummary ms] ] ++
- [(lvl, b, c) | (lvl, b, c) <- msDeps ms ]
-
+--------------------------------------------------------------------------------
+-- ** 'DownsweepM'
+--------------------------------------------------------------------------------
type DownsweepM a = ReaderT DownsweepEnv IO a
data DownsweepEnv = DownsweepEnv {
@@ -405,29 +521,6 @@ data DownsweepEnv = DownsweepEnv {
, _downsweep_excl_mods :: [ModuleName]
}
-type ModSummaryCache = IORef ModSummaryCacheMap
-type ImportsCache = IORef ImportsCacheMap
-
--- | A cache from file paths to the already summarised modules. The same file
--- can be used in multiple units so the map is actually also keyed by which
--- unit the file was used in.
---
--- We want to reuse ModSummaries as far as possible because the most expensive
--- part of downsweep is reading and parsing the headers.
---
--- See Note [Downsweep Control Flow and Caching]
-type ModSummaryCacheMap
- -- The cache can't be keyed by 'Module' because that isn't sufficient to
- -- distinguish .hs from .hs-boot files. Use path+unit instead.
- = ( M.Map (UnitId, OsPath) (Either DriverMessages (ModSummary, SummProvenance)) )
-
-data SummProvenance
- -- | Constructed during this downsweep: trivially up to date
- = SummFresh
- -- | Carried over from a previous run: may be stale, must be hash-checked
- -- (and considered by -fforce-recomp)
- | SummOld
-
mkModSummaryCache :: [(ModSummary, SummProvenance)] -> ModSummaryCacheMap
mkModSummaryCache summs = foldl' (flip (uncurry addModSummaryCache)) M.empty summs
@@ -460,17 +553,19 @@ mkRootMap summaries = Map.fromList
runDownsweepM :: DownsweepEnv -> DownsweepM a -> IO a
runDownsweepM env act = runReaderT act env
-loopDownsweepNodes :: M.Map NodeKey (MGRes ModuleGraphNode) -> [DownsweepNode] -> DownsweepM (M.Map NodeKey (MGRes ModuleGraphNode))
-loopModuleNodeInfos :: M.Map NodeKey (MGRes ModuleGraphNode) -> [ModuleNodeInfo] -> DownsweepM (M.Map NodeKey (MGRes ModuleGraphNode))
-loopUnits :: M.Map NodeKey (MGRes ModuleGraphNode) -> UnitId -> [UnitId] -> DownsweepM (M.Map NodeKey (MGRes ModuleGraphNode))
-loopInstantiations :: M.Map NodeKey (MGRes ModuleGraphNode) -> [(UnitId, InstantiatedUnit)] -> DownsweepM (M.Map NodeKey (MGRes ModuleGraphNode))
-loopFromInteractive :: M.Map NodeKey (MGRes ModuleGraphNode) -> Module -> [InteractiveImport] -> DownsweepM (M.Map NodeKey (MGRes ModuleGraphNode))
+loopDownsweepNodes :: M.Map NodeKey (NodeRes ModuleGraphNode) -> [DownsweepNode] -> DownsweepM (M.Map NodeKey (NodeRes ModuleGraphNode))
+loopModuleNodeInfos :: M.Map NodeKey (NodeRes ModuleGraphNode) -> [ModuleNodeInfo] -> DownsweepM (M.Map NodeKey (NodeRes ModuleGraphNode))
+loopUnits :: M.Map NodeKey (NodeRes ModuleGraphNode) -> UnitId -> [UnitId] -> DownsweepM (M.Map NodeKey (NodeRes ModuleGraphNode))
+loopInstantiations :: M.Map NodeKey (NodeRes ModuleGraphNode) -> [(UnitId, InstantiatedUnit)] -> DownsweepM (M.Map NodeKey (NodeRes ModuleGraphNode))
+loopFromInteractive :: M.Map NodeKey (NodeRes ModuleGraphNode) -> Module -> [InteractiveImport] -> DownsweepM (M.Map NodeKey (NodeRes ModuleGraphNode))
loopDownsweepNodes base_map nodes = dfsBuild (Just base_map) nodes dsNodeInfoKey dsNodeExpand
loopModuleNodeInfos base_map = loopDownsweepNodes base_map . map DSMod
loopUnits base_map homud = loopDownsweepNodes base_map . map (DSUnit homud)
loopInstantiations base_map = loopDownsweepNodes base_map . map (uncurry DSInst)
loopFromInteractive base_map m = loopDownsweepNodes base_map . (:[]) . DSInteractive m
+--------------------------------------------------------------------------------
+-- * Expanding 'DownsweepNode's into payload and node dependencies
--------------------------------------------------------------------------------
-- | A 'DownsweepNode' is the basic block of the downsweep algorithm which
@@ -516,7 +611,7 @@ dsNodeInfoKey = \case
DSInst{instantiated_ud} -> NodeKey_Unit instantiated_ud
DSInteractive mod _imps -> NodeKey_Module $ moduleToMnk mod NotBoot
-dsNodeExpand :: DownsweepNode -> DownsweepM (MGRes (ModuleGraphNode, [DownsweepNode]))
+dsNodeExpand :: DownsweepNode -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
dsNodeExpand = \case
DSMod (ModuleNodeCompile ms) -> expandModuleSummary ms
DSMod (ModuleNodeFixed key loc) -> expandFixedModuleNode key loc
@@ -525,12 +620,29 @@ dsNodeExpand = \case
, home_context_uid } -> expandInstantiatedUnit instantiated_ud home_context_uid
DSInteractive imod iis -> expandInteractiveImports imod iis
-expandModuleSummary :: ModSummary -> DownsweepM (MGRes (ModuleGraphNode, [DownsweepNode]))
+expandModuleSummary :: ModSummary -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
expandModuleSummary ms = do -- Didn't work out what the imports mean yet, now do that.
hsc_env <- asks downsweep_hsc_env
let home_uid = ms_unitid ms
home_unit = ue_unitHomeUnit home_uid (hsc_unit_env hsc_env)
- (final_deps, todo) <- fmap unzip $ forM (calcDeps ms) $ \(imp,mb_pkg,gwib) -> do
+ (final_deps, todo) <- unzip <$> mapM (expandModImport home_uid home_unit) (calcDeps ms)
+
+ -- This has the effect of finding a .hs file if we are looking at the .hs-boot file.
+ boot_todo <-
+ if | HsBootFile <- ms_hsc_src ms
+ -> do
+ r <- downsweepSummarise home_unit NotBoot (noLoc $ ms_mod_name ms) NoPkgQual Nothing
+ case r of
+ FoundHome s -> pure [DSMod s]
+ _ -> pure []
+ | otherwise -> pure []
+
+ return $ NSuccess
+ ( ModuleNode (catMaybes final_deps) (ModuleNodeCompile ms)
+ , boot_todo ++ concat todo
+ )
+ where
+ expandModImport home_uid home_unit (imp,mb_pkg,gwib) = do
let GWIB { gwib_mod = L loc mod, gwib_isBoot = is_boot } = gwib
wanted_mod = L loc mod
mb_s <- downsweepSummarise home_unit is_boot wanted_mod mb_pkg Nothing
@@ -552,24 +664,17 @@ expandModuleSummary ms = do -- Didn't work out what the imports mean yet, now do
( Just $ mkModuleEdge imp (NodeKey_Module (mnKey s))
, [DSMod s] )
- -- This has the effect of finding a .hs file if we are looking at the .hs-boot file.
- boot_todo <-
- if | HsBootFile <- ms_hsc_src ms
- -> do
- r <- downsweepSummarise home_unit NotBoot (noLoc $ ms_mod_name ms) NoPkgQual Nothing
- case r of
- FoundHome s -> pure [DSMod s]
- _ -> pure []
- | otherwise -> pure []
-
- return $ NSuccess
- ( ModuleNode (catMaybes final_deps) (ModuleNodeCompile ms)
- , boot_todo ++ concat todo
- )
+ calcDeps :: ModSummary -> [(ImportLevel, PkgQual, GenWithIsBoot (Located ModuleName))]
+ calcDeps ms =
+ -- Add a dependency on the HsBoot file if it exists
+ -- This gets passed to the loopImports function which just ignores it if it
+ -- can't be found.
+ [(NormalLevel, NoPkgQual, GWIB (noLoc $ ms_mod_name ms) IsBoot) | NotBoot <- [isBootSummary ms] ] ++
+ [(lvl, b, c) | (lvl, b, c) <- msDeps ms ]
-- | Expand a 'ModuleNodeFixed' node
-- NB: If you ever reach a Fixed node, everything under that also must be fixed.
-expandFixedModuleNode :: ModNodeKeyWithUid -> ModLocation -> DownsweepM (MGRes (ModuleGraphNode, [DownsweepNode]))
+expandFixedModuleNode :: ModNodeKeyWithUid -> ModLocation -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
expandFixedModuleNode key loc = do
hsc_env <- asks downsweep_hsc_env
-- MP: TODO, we should just read the dependency info from the interface rather than either
@@ -603,7 +708,7 @@ expandFixedModuleNode key loc = do
pure $ Just $ DSMod (ModuleNodeFixed key loc)
_otherwise ->
-- If the finder fails, just keep going, there will be another
- -- error later.
+ -- error later when we try to expand this dependency.
pure Nothing
mk_dep _ (Right uid_dep) = do
-- Set active unit so that looking loopUnit finds the correct
@@ -611,9 +716,22 @@ expandFixedModuleNode key loc = do
let home_uid = mnkUnitId key
pure (Just DSUnit{node_uid=uid_dep, home_context_uid=home_uid})
+ mkFixedEdge :: Either (ImportLevel, ModNodeKeyWithUid) (ImportLevel, UnitId) -> ModuleNodeEdge
+ mkFixedEdge (Left (lvl, key)) = mkModuleEdge lvl (NodeKey_Module key)
+ mkFixedEdge (Right (lvl, uid)) = mkModuleEdge lvl (NodeKey_ExternalUnit uid)
+
+ ifaceDeps :: Dependencies -> [Either (ImportLevel, ModNodeKeyWithUid) (ImportLevel, UnitId)]
+ ifaceDeps deps =
+ [ Left (tcImportLevel lvl, ModNodeKeyWithUid dep uid)
+ | (lvl, uid, dep) <- Set.toList (dep_direct_mods deps)
+ ] ++
+ [ Right (tcImportLevel lvl, uid)
+ | (lvl, uid) <- Set.toList (dep_direct_pkgs deps)
+ ]
+
-- | Expand a unit id under the context of a certain home unit
expandUnitNode :: UnitId {-^ @node_uid@ -} -> UnitId {-^ Home unit from where @node_uid@ was introduced -}
- -> DownsweepM (MGRes (ModuleGraphNode, [DownsweepNode]))
+ -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
expandUnitNode node_uid home_context_uid = do
-- Set active unit so that looking loopUnit finds the correct
-- -package flags in the unit state.
@@ -623,12 +741,12 @@ expandUnitNode node_uid home_context_uid = do
Just us -> pure $ NSuccess ((UnitNode us node_uid), map (\u -> DSUnit{node_uid=u, home_context_uid{-inherit-}}) us)
Nothing -> pprPanic "loopUnit" (text "Malformed package database, missing " <+> ppr node_uid)
-expandInstantiatedUnit :: InstantiatedUnit -> UnitId {-^ Home unit -} -> DownsweepM (MGRes (ModuleGraphNode, [DownsweepNode]))
+expandInstantiatedUnit :: InstantiatedUnit -> UnitId {-^ Home unit -} -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
expandInstantiatedUnit iud home_uid = pure $ NSuccess
( InstantiationNode home_uid iud
, [DSUnit{node_uid=instUnitInstanceOf iud, home_context_uid=home_uid}] )
-expandInteractiveImports :: Module -> [InteractiveImport] -> DownsweepM (MGRes (ModuleGraphNode, [DownsweepNode]))
+expandInteractiveImports :: Module -> [InteractiveImport] -> DownsweepM (NodeRes (ModuleGraphNode, [DownsweepNode]))
expandInteractiveImports imod imps = do
hsc_env <- asks downsweep_hsc_env
imps_cache <- asks downsweep_imports_cache
@@ -686,19 +804,8 @@ expandInteractiveImports imod imps = do
node_type = ModuleNodeFixed key ml
--------------------------------------------------------------------------------
-
-mkFixedEdge :: Either (ImportLevel, ModNodeKeyWithUid) (ImportLevel, UnitId) -> ModuleNodeEdge
-mkFixedEdge (Left (lvl, key)) = mkModuleEdge lvl (NodeKey_Module key)
-mkFixedEdge (Right (lvl, uid)) = mkModuleEdge lvl (NodeKey_ExternalUnit uid)
-
-ifaceDeps :: Dependencies -> [Either (ImportLevel, ModNodeKeyWithUid) (ImportLevel, UnitId)]
-ifaceDeps deps =
- [ Left (tcImportLevel lvl, ModNodeKeyWithUid dep uid)
- | (lvl, uid, dep) <- Set.toList (dep_direct_mods deps)
- ] ++
- [ Right (tcImportLevel lvl, uid)
- | (lvl, uid) <- Set.toList (dep_direct_pkgs deps)
- ]
+-- * Constructing Module Summaries
+--------------------------------------------------------------------------------
downsweepSummarise :: HomeUnit
-> IsBootInterface
@@ -745,35 +852,6 @@ instantiationNodes uid unit_state = map (uid,) iuids_to_check
, recur <- (indef :) $ goUnitId $ moduleUnit $ snd inst
]
--- The linking plan for each module. If we need to do linking for a home unit
--- then this function returns a graph node which depends on all the modules in the home unit.
-
--- At the moment nothing can depend on these LinkNodes.
-linkNodes :: [ModuleGraphNode] -> UnitId -> HomeUnitEnv -> Maybe (Either (Messages DriverMessage) ModuleGraphNode)
-linkNodes summaries uid hue =
- let dflags = homeUnitEnv_dflags hue
- ofile = outputFile_ dflags
-
- unit_nodes :: [NodeKey]
- unit_nodes = map mkNodeKey (filter ((== uid) . mgNodeUnitId) summaries)
- -- Issue a warning for the confusing case where the user
- -- said '-o foo' but we're not going to do any linking.
- -- We attempt linking if either (a) one of the modules is
- -- called Main, or (b) the user said -no-hs-main, indicating
- -- that main() is going to come from somewhere else.
- --
- no_hs_main = gopt Opt_NoHsMain dflags
-
- main_sum = any (== NodeKey_Module (ModNodeKeyWithUid (GWIB (mainModuleNameIs dflags) NotBoot) uid)) unit_nodes
-
- do_linking = main_sum || no_hs_main || ghcLink dflags == LinkDynLib || ghcLink dflags == LinkStaticLib || ghcLink dflags == LinkBytecodeLib
-
- in if | isExecutableLink (ghcLink dflags) && isJust ofile && not do_linking ->
- Just (Left $ singleMessage $ mkPlainErrorMsgEnvelope noSrcSpan (DriverRedirectedNoMain $ mainModuleNameIs dflags))
- -- This should be an error, not a warning (#10895).
- | ghcLink dflags /= NoLink, do_linking -> Just (Right (LinkNode unit_nodes uid))
- | otherwise -> Nothing
-
getRootSummary ::
[ModuleName] ->
ModSummaryCache ->
@@ -858,6 +936,10 @@ rootSummariesParallel n_jobs hsc_env diag_wrapper msg get_summary = do
throwIO e
a -> pure a
+--------------------------------------------------------------------------------
+-- * Check/validate properties and error out
+--------------------------------------------------------------------------------
+
-- | This function checks then important property that if both p and q are home units
-- then any dependency of p, which transitively depends on q is also a home unit.
--
@@ -905,6 +987,10 @@ checkHomeUnitsClosed ue
let todo'' = (depends Set.\\ done) `Set.union` todo'
in DigraphNode uid uid (Set.toList depends) : go (Set.insert uid done) todo''
+--------------------------------------------------------------------------------
+-- * Enable Code Gen for Template Haskell
+--------------------------------------------------------------------------------
+
-- | Update the every ModSummary that is depended on
-- by a module that needs template haskell. We enable codegen to
-- the specified target, disable optimization and change the .hi
@@ -1223,7 +1309,8 @@ Potential TODOS:
-}
-----------------------------------------------------------------------------
--- Summarising modules
+-- * Pre-processing and Summarising and modules
+-----------------------------------------------------------------------------
-- We have two types of summarisation:
--
@@ -1639,9 +1726,11 @@ getPreprocessedImports hsc_env src_fn mb_phase maybe_buf = do
return PreprocessedImports {..}
--------------------------------------------------------------------------------
+-- * Generic traversal of iteratively-built graph: dfsBuild
+--------------------------------------------------------------------------------
-- | The result of expanding a node in 'dfsBuild'.
-data MGRes v
+data NodeRes v
-- | Computed the node payload successfully
= NSuccess v
-- | Skip a node! This means this node doesn't produce a payload and we can
@@ -1657,8 +1746,8 @@ data MGRes v
-- graph by iteratively expanding a node into a payload and a list of children
-- nodes to visit next.
--
--- A node is NEVER visited/expanded more than once, as long as the the
--- node key @k@, computed from the node @n@, uniquely identifies that node.
+-- A node is NEVER visited/expanded more than once, as long as the node key
+-- @k@, computed from the node @n@, uniquely identifies that node.
--
-- The first argument @base_map@ is the starting set of already visited nodes
-- (these nodes won't be expanded again!).
@@ -1678,17 +1767,17 @@ data MGRes v
--
-- See also Note [Downsweep Control Flow and Caching]
dfsBuild :: (Ord k, Monad m)
- => Maybe (Map.Map k (MGRes v))
+ => Maybe (Map.Map k (NodeRes v))
-- ^ Base map, existing results. We won't re-expand any of the nodes
-- already present in this map.
-> [n]
-- ^ The root nodes from where to start traversal
-> (n -> k)
-- ^ Compute the key which uniquely identifies this node
- -> (n -> m (MGRes (v,[n])))
+ -> (n -> m (NodeRes (v,[n])))
-- ^ Expand this node into its payload result and into the list of
-- children nodes to visit next.
- -> m (Map.Map k (MGRes v))
+ -> m (Map.Map k (NodeRes v))
-- ^ The result accumulates the payload of expanding the root nodes
-- and all nodes transitively reachable from those roots.
dfsBuild base_map roots key expand = go roots (fromMaybe Map.empty base_map)
@@ -1704,7 +1793,7 @@ dfsBuild base_map roots key expand = go roots (fromMaybe Map.empty base_map)
go ss
(Map.insert k NSkip visited) -- Skip!
NSuccess (v,ns) ->
- go (ns ++ ss {- todo: not use ++ here? -})
+ go (ns ++ ss)
(Map.insert k (NSuccess v) visited)
where
k = key s
@@ -1725,6 +1814,17 @@ twice).
same node of the module graph. Cache is keyed by the final
`ModuleGraph`s `NodeKey`s.
+ For example, suppose
+
+ A imports B and C
+ B imports D
+ C imports D
+
+ Then, starting from A we will expand A and push B and C to the worklist;
+ then, going back to B, we expand B which pushes D to the worklist. After
+ processing D, we go to C, which imports D, but we have already visited that
+ module so we can just use the already-constructed `ModuleGraphNode` for D.
+
2. For Module A in home-unit u1, each import in the list of imports
needs to be *found* (call to `findImportedModuleWithIsBoot`): at this
point, we only have the `ModuleName` of the import, not the `Module`.
@@ -1732,6 +1832,16 @@ twice).
(`ImportsCache`). The cache key is the home-unit to which the module
belongs~[1], the import package qualifier, and the ModuleName.
+ Same example, suppose
+
+ A imports B and C
+ B imports D
+ C imports D
+
+ When expanding B, we will findImportedModule "import D".
+ When expanding C, we would findImportedModule "import D", but we can just
+ look it up in the cache
+
[1] Different home-units will have different package flags, which means
potentially different `Module` resolution for the same `ModuleName`.
@@ -1745,8 +1855,13 @@ twice).
distinguish between `.hs` and `.hs-boot` files, as their summaries
will differ.
+ Note that this covers more than just (1), because we summarise all imports
+ of a single module when expanding it (see 'expandModuleSummary'), before
+ returning from the expansion function.
+
Note that (2) can't guarantee this alone: Two ModuleName imports in
separate units can (and likely do) map to the same `Module`.
-See also Note [Downsweep and the ModuleGraph]
+See also Note [Downsweep: building and maintaining the module graph] and
+Note [The ModuleGraph].
-}
=====================================
compiler/GHC/Driver/Env.hs
=====================================
@@ -270,7 +270,7 @@ hugSomeThingsBelowUs :: (HomeModInfo -> [a]) -> Bool -> HscEnv -> UnitId -> Modu
-- These things are currently stored in the EPS for home packages. (See #25795 for
-- progress in removing these kind of checks; and making these functions of
-- `UnitEnv` rather than `HscEnv`)
--- See Note [Downsweep and the ModuleGraph]
+-- See Note [The ModuleGraph]
hugSomeThingsBelowUs _ _ hsc_env _ _ | isOneShot (ghcMode (hsc_dflags hsc_env)) = return []
hugSomeThingsBelowUs extract include_hi_boot hsc_env uid mn
= let hug = hsc_HUG hsc_env
=====================================
compiler/GHC/Unit/Env.hs
=====================================
@@ -164,7 +164,7 @@ data UnitEnv = UnitEnv
, ue_module_graph :: ModuleGraph
-- ^ The module graph of the current session
- -- See Note [Downsweep and the ModuleGraph] for when this is constructed.
+ -- See Note [The ModuleGraph] for when this is constructed.
, ue_home_unit_graph :: !HomeUnitGraph
-- See Note [Multiple Home Units]
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5bfee53ad2045e9c6f1dae6bd2abd7e…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/5bfee53ad2045e9c6f1dae6bd2abd7e…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/jeltsch/textual-bytecode-output] 7 commits: Make HPC information hashes non-negative
by Wolfgang Jeltsch (@jeltsch) 30 Jul '26
by Wolfgang Jeltsch (@jeltsch) 30 Jul '26
30 Jul '26
Wolfgang Jeltsch pushed to branch wip/jeltsch/textual-bytecode-output at Glasgow Haskell Compiler / GHC
Commits:
40bd290f by Wolfgang Jeltsch at 2026-07-30T14:32:16+03:00
Make HPC information hashes non-negative
- - - - -
1433167b by Wolfgang Jeltsch at 2026-07-30T15:19:39+03:00
Change names of variables in `where` clauses to snake case
- - - - -
b74f57b8 by Wolfgang Jeltsch at 2026-07-30T15:36:32+03:00
Remove the module from HPC information output
- - - - -
86369aba by Wolfgang Jeltsch at 2026-07-30T15:47:51+03:00
Stop using the term “name” in entry titles
- - - - -
b83d4768 by Wolfgang Jeltsch at 2026-07-30T15:50:13+03:00
Change “ordinary object” to “object”
- - - - -
6f2ba014 by Wolfgang Jeltsch at 2026-07-30T16:27:29+03:00
Add parentheses around operators
- - - - -
3cf8ab69 by Wolfgang Jeltsch at 2026-07-30T16:30:31+03:00
Restore consequent two-spaces indentation
- - - - -
4 changed files:
- compiler/GHC/ByteCode/Show.hs
- testsuite/tests/show-bytecode/show-bytecode-breakpoints.stdout
- testsuite/tests/show-bytecode/show-bytecode-hpc.stdout
- testsuite/tests/show-bytecode/show-bytecode-vanilla.stdout
Changes:
=====================================
compiler/GHC/ByteCode/Show.hs
=====================================
@@ -1,3 +1,4 @@
+{-# LANGUAGE MagicHash #-}
{-# LANGUAGE ImportQualifiedPost #-}
{-# LANGUAGE RecordWildCards #-}
@@ -34,8 +35,8 @@ import GHC.Data.FastString (unpackFS)
import GHC.Data.FlatBag (FlatBag, elemsFlatBag)
import GHC.Fingerprint (Fingerprint)
import GHC.Types.SrcLoc (noSrcSpan)
-import GHC.Types.Name (Name)
-import GHC.Types.Name.Occurrence (OccName)
+import GHC.Types.Name (Name, nameOccName)
+import GHC.Types.Name.Occurrence (OccName, isSymOcc)
import GHC.Types.Tickish (BreakTickIndex, BreakpointId (..))
import GHC.Types.SptEntry (SptEntry (..))
import GHC.Types.Error (MessageClass (MCDump))
@@ -57,12 +58,13 @@ import GHC.Utils.Outputable
withPprStyle,
ppr
)
-import GHC.Unit.Types (Module)
+import GHC.Unit.Types (Module, moduleName)
import GHC.Iface.Type (IfaceType, IfaceTvBndr, IfaceIdBndr)
import GHC.HsToCore.Breakpoints (ModBreaks (..))
import GHC.Driver.Env.Types (HscEnv)
import GHCi.FFI (FFIType)
import GHCi.Message (ConInfoTable (..))
+import Language.Haskell.Syntax.Module.Name (moduleNameString)
-- Basic things
import Control.Arrow ((>>>))
@@ -73,6 +75,7 @@ import Data.IntMap (IntMap)
import Data.IntMap qualified as IntMap (toList)
import Data.Array (bounds, indices, elems)
import Numeric (showHex)
+import GHC.Exts (Int (I#), Word (W#), int2Word#)
-- | Outputs textual information about the contents of a bytecode file.
showByteCode :: Logger -> HscEnv -> FilePath -> IO ()
@@ -87,14 +90,14 @@ showByteCode logger env path = do
pprOnDiskModuleByteCode :: OnDiskModuleByteCode -> SDoc
pprOnDiskModuleByteCode OnDiskModuleByteCode {..}
= vcat [
- pprModuleIdent $ odgbc_module,
+ pprModule $ odgbc_module,
pprOnDiskModuleByteCodeHash $ odgbc_hash,
pprCompiledByteCode odgbc_module $ odgbc_compiled_byte_code
]
--- | Constructs textual information about the name of a module.
-pprModuleIdent :: Module -> SDoc
-pprModuleIdent = entry (text "name") . ppr
+-- | Constructs textual information about a module.
+pprModule :: Module -> SDoc
+pprModule = entry (text "module") . ppr
-- | Constructs textual information about the hash of a module.
pprOnDiskModuleByteCodeHash :: Fingerprint -> SDoc
@@ -111,7 +114,7 @@ pprCompiledByteCode current_module CompiledByteCode {..}
pprTopLevelStrings $ bc_strs,
pprBreakpoints current_module $ bc_breaks,
pprStaticPointerTableEntries $ bc_spt_entries,
- pprHPCInfo $ bc_hpc_info
+ pprHPCInfo current_module $ bc_hpc_info
]
-- | Constructs textual information about bytecode objects.
@@ -129,7 +132,7 @@ pprByteCodeObject :: Module -- ^ The enclosing module
-> SDoc -- ^ The textual information
pprByteCodeObject current_module byte_code_object = case byte_code_object of
UnlinkedBCO {..}
- -> entry (text "ordinary object" <+> quotes (ppr unlinkedBCOName)) $
+ -> entry (text "object" <+> quotes (pprName unlinkedBCOName)) $
vcat [
pprArity $ unlinkedBCOArity,
pprLiterals current_module $ unlinkedBCOLits,
@@ -137,26 +140,25 @@ pprByteCodeObject current_module byte_code_object = case byte_code_object of
]
UnlinkedStaticCon {..}
-> entry (
- text "static-construction object" <+>
- quotes (ppr unlinkedStaticConName)
+ text "static-construction object" <+>
+ quotes (pprName unlinkedStaticConName)
)
$
vcat [
- pprDataConstructorName $ unlinkedStaticConDataConName,
+ pprDataConstructor $ unlinkedStaticConDataConName,
pprLiftedness $ not unlinkedStaticConIsUnlifted,
pprLiterals current_module $ unlinkedStaticConLits,
pprUsedItems current_module $ unlinkedStaticConPtrs
]
--- | Constructs textual information about the arity of an ordinary bytecode
--- object.
+-- | Constructs textual information about the arity of a bytecode object.
pprArity :: Int -> SDoc
pprArity = entry (text "arity") . ppr
--- | Constructs textual information about the data constructor name of a
+-- | Constructs textual information about the data constructor of a
-- static-construction bytecode object.
-pprDataConstructorName :: Name -> SDoc
-pprDataConstructorName = entry (text "data constructor name") . ppr
+pprDataConstructor :: Name -> SDoc
+pprDataConstructor = entry (text "data constructor") . pprName
-- | Constructs textual information about the liftedness of a
-- static-construction bytecode object.
@@ -185,10 +187,10 @@ pprLiteral current_module literal = case literal of
quotes (ppr label)
BCONPtrItbl infoTableName
-> text "info table of" <+>
- quotes (ppr infoTableName)
+ quotes (pprName infoTableName)
BCONPtrAddr addrName
-> text "address" <+>
- quotes (ppr addrName)
+ quotes (pprName addrName)
BCONPtrStr encoded_string
-> text "top-level string" <+>
text (show (utf8DecodeByteString encoded_string))
@@ -221,14 +223,14 @@ pprInternalBreakpointID
-> InternalBreakpointId -- ^ The ID of the bytecode breakpoint
-> SDoc -- ^ The textual information
pprInternalBreakpointID current_module InternalBreakpointId {..}
- | ibi_info_mod == current_module = indexDoc
- | otherwise = indexDoc <+>
+ | ibi_info_mod == current_module = index_doc
+ | otherwise = index_doc <+>
text "in" <+>
quotes (ppr ibi_info_mod)
where
- indexDoc :: SDoc
- indexDoc = ppr ibi_info_index
+ index_doc :: SDoc
+ index_doc = ppr ibi_info_index
-- | Constructs textual information about used items.
pprUsedItems :: Module -- ^ The enclosing module
@@ -245,7 +247,7 @@ pprUsedItem :: Module -- ^ The enclosing module
-> SDoc -- ^ The textual information
pprUsedItem current_module usedItem = case usedItem of
BCOPtrName name
- -> text "named item" <+> quotes (ppr name)
+ -> text "named item" <+> quotes (pprName name)
BCOPtrPrimOp primOp
-> text "primitive operation" <+> quotes (ppr primOp)
BCOPtrBCO byte_code_object
@@ -262,7 +264,7 @@ pprDataConstructorInfoTables = entry (text "data constructor info tables") .
-- | Constructs textual information about a single data constructor info table.
pprDataConstructorInfoTable :: Name -> ConInfoTable -> SDoc
pprDataConstructorInfoTable dataConstrName ConInfoTable {..}
- = entry (text "info table of" <+> quotes (ppr dataConstrName)) $
+ = entry (text "info table of" <+> quotes (pprName dataConstrName)) $
vcat [
pprPointerWordCount $ conItblPtrs,
pprNonPointerWordCount $ conItblNPtrs
@@ -284,10 +286,10 @@ pprTopLevelStrings = entry (text "top-level strings") .
-- | Constructs textual information about a single top-level string.
pprTopLevelString :: Name -> ByteString -> SDoc
-pprTopLevelString string_name encoded_string = entry (ppr string_name) $
- text $
- show $
- utf8DecodeByteString $
+pprTopLevelString string_name encoded_string = entry (pprName string_name) $
+ text $
+ show $
+ utf8DecodeByteString $
encoded_string
-- | Constructs textual information about breakpoints.
@@ -429,14 +431,14 @@ pprBreakpointID :: Module -- ^ The enclosing module
-> BreakpointId -- ^ The ID of the source breakpoint
-> SDoc -- ^ The textual information
pprBreakpointID current_module BreakpointId {..}
- | bi_tick_mod == current_module = indexDoc
- | otherwise = indexDoc <+>
+ | bi_tick_mod == current_module = index_doc
+ | otherwise = index_doc <+>
text "in" <+>
quotes (ppr bi_tick_mod)
where
- indexDoc :: SDoc
- indexDoc = ppr bi_tick_index
+ index_doc :: SDoc
+ index_doc = ppr bi_tick_index
-- | Constructs textual information about static-pointer table entries.
pprStaticPointerTableEntries :: [SptEntry] -> SDoc
@@ -447,58 +449,69 @@ pprStaticPointerTableEntries = entry (text "static-pointer table entries") .
-- | Constructs textual information about a single static-pointer table entry.
pprStaticPointerTableEntry :: SptEntry -> SDoc
pprStaticPointerTableEntry (SptEntry name fingerprint)
- = ppr fingerprint <> text ":" <+> ppr name
+ = ppr fingerprint <> text ":" <+> pprName name
-- | Constructs textual information about HPC info.
-pprHPCInfo :: Strict.Maybe ByteCodeHpcInfo -> SDoc
-pprHPCInfo = entry (text "HPC information") .
- Strict.maybe (text "<none>") pprActualHPCInfo
+pprHPCInfo :: Module -- ^ The enclosing module
+ -> Strict.Maybe ByteCodeHpcInfo -- ^ The HPC info
+ -> SDoc -- ^ The textual information
+pprHPCInfo current_module
+ = entry (text "HPC information") .
+ Strict.maybe (text "<none>") (pprActualHPCInfo current_module)
-- | Constructs textual information about actual HPC info.
-pprActualHPCInfo :: ByteCodeHpcInfo -> SDoc
-pprActualHPCInfo ByteCodeHpcInfo {..}
- = vcat [
+pprActualHPCInfo :: Module -- ^ The enclosing module
+ -> ByteCodeHpcInfo -- ^ The actual HPC info
+ -> SDoc -- ^ The textual information
+pprActualHPCInfo current_module ByteCodeHpcInfo {..}
+ = assert (
+ utf8DecodeShortByteString bchi_module_name
+ ==
+ moduleNameString (moduleName current_module)
+ )
+ $
+ vcat [
pprHPCInfoHash $ bchi_hash,
- pprModuleName $ bchi_module_name,
- pprTickBoxName $ bchi_tickbox_name,
+ pprTickBox $ bchi_tickbox_name,
pprTickCount $ bchi_tick_count
]
-- | Constructs textual information about the hash of HPC info.
pprHPCInfoHash :: Int -> SDoc
-pprHPCInfoHash = entry (text "hash") . pprFixedSizeNatural
-
--- | Constructs textual information about a module name.
-pprModuleName :: ShortByteString -> SDoc
-pprModuleName = entry (text "module name") .
- text .
- utf8DecodeShortByteString
+pprHPCInfoHash = entry (text "hash") . pprFixedSizeNatural . intToWord
--- | Constructs textual information about a tick box name.
-pprTickBoxName :: ShortByteString -> SDoc
-pprTickBoxName = entry (text "tick box name") .
- text .
- utf8DecodeShortByteString
+-- | Constructs textual information about a tick box.
+pprTickBox :: ShortByteString -> SDoc
+pprTickBox = entry (text "tick box") . text . utf8DecodeShortByteString
-- | Constructs textual information about a number of tick counts.
pprTickCount :: Int -> SDoc
pprTickCount = entry (text "number of ticks") . ppr
+-- | Constructs the Haskell representation of a name.
+pprName :: Name -> SDoc
+pprName name | isSymOcc (nameOccName name) = text "(" <> ppr name <> text ")"
+ | otherwise = ppr name
+
-- | Constructs a hexadecimal representation of a natural number such that the
-- number of hexadecimal digits fits the number of bits used to represent the
-- natural number.
pprFixedSizeNatural :: (Integral a, FiniteBits a) => a -> SDoc
pprFixedSizeNatural num
= assert (num >= 0) $
- text $ replicate (digitCount - length unpadded) '0' ++ unpadded
+ text $ replicate (digit_count - length unpadded) '0' ++ unpadded
where
- digitCount :: Int
- digitCount = (finiteBitSize num + 3) `div` 4
+ digit_count :: Int
+ digit_count = (finiteBitSize num + 3) `div` 4
unpadded :: String
unpadded = showHex num ""
+-- | Turns an 'Int' value into the 'Word' value with the same representation.
+intToWord :: Int -> Word
+intToWord (I# int#) = W# (int2Word# int#)
+
-- | Constructs a textual representation of a boolean, interpreting 'True' and
-- 'False' as “yes” and “no”, respectively.
noOrYes :: Bool -> SDoc
=====================================
testsuite/tests/show-bytecode/show-bytecode-breakpoints.stdout
=====================================
@@ -1,8 +1,8 @@
[1 of 1] Compiling Example ( Example.hs, Example.gbc )
-name: Example
+module: Example
hash: @hash@
objects:
- ordinary object ‘primesPtr’:
+ object ‘primesPtr’:
arity: 0
literals:
top-level string "Example"
@@ -14,7 +14,7 @@ objects:
named item ‘$dTypeable2_@name_suffix@’
named item ‘$fIsStaticStaticPtr’
static-construction object ‘static_ptr1’:
- data constructor name: StaticPtr
+ data constructor: StaticPtr
lifted: yes
literals:
word @large_word@
@@ -23,56 +23,56 @@ objects:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘primes’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: StaticPtrInfo
+ data constructor: StaticPtrInfo
lifted: yes
literals: <none>
used items:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: top-level string "main"
used items:
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: top-level string "Example"
used items:
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: (,)
+ data constructor: (,)
lifted: yes
literals: <none>
used items:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 27
used items: <none>
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 20
used items: <none>
- ordinary object ‘primes’:
+ object ‘primes’:
arity: 0
literals:
top-level string "Example"
top-level string "main"
cost center of breakpoint 2
- info table of ‘:’
+ info table of ‘(:)’
used items:
break array of module ‘Example’
- ordinary object ‘primes_sat_@name_suffix@’:
+ object ‘primes_sat_@name_suffix@’:
arity: 0
literals:
top-level string "Example"
@@ -80,11 +80,11 @@ objects:
cost center of breakpoint 1
used items:
break array of module ‘Example’
- ordinary object ‘primes_sat_@name_suffix@’:
+ object ‘primes_sat_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘primes_sat_@name_suffix@’:
+ object ‘primes_sat_@name_suffix@’:
arity: 0
literals:
word 3
@@ -96,7 +96,7 @@ objects:
named item ‘enumFrom’
named item ‘isPrime_@name_suffix@’
named item ‘filter’
- ordinary object ‘primes_sat_@name_suffix@’:
+ object ‘primes_sat_@name_suffix@’:
arity: 0
literals:
word 2
@@ -104,7 +104,7 @@ objects:
used items:
named item ‘$fNumNatural’
named item ‘fromInteger’
- ordinary object ‘isPrime_@name_suffix@’:
+ object ‘isPrime_@name_suffix@’:
arity: 1
literals:
top-level string "Example"
@@ -112,7 +112,7 @@ objects:
cost center of breakpoint 9
used items:
break array of module ‘Example’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals:
top-level string "Example"
@@ -120,7 +120,7 @@ objects:
cost center of breakpoint 8
used items:
break array of module ‘Example’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals:
top-level string "Example"
@@ -128,7 +128,7 @@ objects:
cost center of breakpoint 7
used items:
break array of module ‘Example’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals:
top-level string "Example"
@@ -136,7 +136,7 @@ objects:
cost center of breakpoint 6
used items:
break array of module ‘Example’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 0
literals:
top-level string "Example"
@@ -146,18 +146,18 @@ objects:
info table of ‘IS’
used items:
break array of module ‘Example’
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$fIntegralInteger’
named item ‘$fNumNatural’
- named item ‘^’
- ordinary object ‘pap_@name_suffix@’:
+ named item ‘(^)’
+ object ‘pap_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals:
top-level string "Example"
@@ -165,20 +165,20 @@ objects:
cost center of breakpoint 4
used items:
break array of module ‘Example’
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$fOrdNatural’
- named item ‘<=’
- ordinary object ‘pap_@name_suffix@’:
+ named item ‘(<=)’
+ object ‘pap_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
- named item ‘.’
+ named item ‘(.)’
named item ‘primes’
named item ‘takeWhile’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals:
top-level string "Example"
@@ -186,7 +186,7 @@ objects:
cost center of breakpoint 3
used items:
break array of module ‘Example’
- ordinary object ‘pap_@name_suffix@’:
+ object ‘pap_@name_suffix@’:
arity: 2
literals: <none>
used items:
@@ -195,7 +195,7 @@ objects:
named item ‘$fFoldableList’
named item ‘any’
named item ‘not’
- ordinary object ‘fibonaccisPtr’:
+ object ‘fibonaccisPtr’:
arity: 0
literals:
top-level string "Example"
@@ -207,7 +207,7 @@ objects:
named item ‘$dTypeable2_@name_suffix@’
named item ‘$fIsStaticStaticPtr’
static-construction object ‘static_ptr’:
- data constructor name: StaticPtr
+ data constructor: StaticPtr
lifted: yes
literals:
word @large_word@
@@ -216,56 +216,56 @@ objects:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘fibonaccis’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: StaticPtrInfo
+ data constructor: StaticPtrInfo
lifted: yes
literals: <none>
used items:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: top-level string "main"
used items:
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: top-level string "Example"
used items:
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: (,)
+ data constructor: (,)
lifted: yes
literals: <none>
used items:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 15
used items: <none>
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 24
used items: <none>
- ordinary object ‘fibonaccis’:
+ object ‘fibonaccis’:
arity: 0
literals:
top-level string "Example"
top-level string "main"
cost center of breakpoint 11
- info table of ‘:’
+ info table of ‘(:)’
used items:
break array of module ‘Example’
- ordinary object ‘fibonaccis_sat_@name_suffix@’:
+ object ‘fibonaccis_sat_@name_suffix@’:
arity: 0
literals:
word 0
@@ -274,16 +274,16 @@ objects:
named item ‘$fNumNatural’
named item ‘fromInteger’
named item ‘positiveFibonaccis_@name_suffix@’
- ordinary object ‘positiveFibonaccis_@name_suffix@’:
+ object ‘positiveFibonaccis_@name_suffix@’:
arity: 0
literals:
top-level string "Example"
top-level string "main"
cost center of breakpoint 13
- info table of ‘:’
+ info table of ‘(:)’
used items:
break array of module ‘Example’
- ordinary object ‘positiveFibonaccis_sat_@name_suffix@’:
+ object ‘positiveFibonaccis_sat_@name_suffix@’:
arity: 0
literals:
top-level string "Example"
@@ -291,16 +291,16 @@ objects:
cost center of breakpoint 12
used items:
break array of module ‘Example’
- ordinary object ‘positiveFibonaccis_sat_@name_suffix@’:
+ object ‘positiveFibonaccis_sat_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$fNumNatural’
- named item ‘+’
+ named item ‘(+)’
named item ‘positiveFibonaccis_@name_suffix@’
named item ‘fibonaccis’
named item ‘zipWith’
- ordinary object ‘positiveFibonaccis_sat_@name_suffix@’:
+ object ‘positiveFibonaccis_sat_@name_suffix@’:
arity: 0
literals:
word 1
@@ -308,27 +308,27 @@ objects:
used items:
named item ‘$fNumNatural’
named item ‘fromInteger’
- ordinary object ‘$dTypeable2_@name_suffix@’:
+ object ‘$dTypeable2_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$dTypeable_@name_suffix@’
named item ‘$dTypeable1_@name_suffix@’
named item ‘mkTrAppChecked’
- ordinary object ‘$dTypeable1_@name_suffix@’:
+ object ‘$dTypeable1_@name_suffix@’:
arity: 0
literals: info table of ‘[]’
used items:
named item ‘$tcList’
named item ‘mkTrCon’
- ordinary object ‘$dTypeable_@name_suffix@’:
+ object ‘$dTypeable_@name_suffix@’:
arity: 0
literals: info table of ‘[]’
used items:
named item ‘$tcNatural’
named item ‘mkTrCon’
static-construction object ‘$tc'Nested’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -339,33 +339,33 @@ objects:
named item ‘$tc'Nested2_@name_suffix@’
named item ‘$krep17_@name_suffix@’
static-construction object ‘$tc'Nested2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Nested1_@name_suffix@’
used items: <none>
static-construction object ‘$krep17_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep16_@name_suffix@’
named item ‘$krep13_@name_suffix@’
static-construction object ‘$krep16_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcPerfectTree’
named item ‘$krep15_@name_suffix@’
static-construction object ‘$krep15_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep4_@name_suffix@’
named item ‘[]’
static-construction object ‘$tc'PerfectTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -376,33 +376,33 @@ objects:
named item ‘$tc'PerfectTree2_@name_suffix@’
named item ‘$krep14_@name_suffix@’
static-construction object ‘$tc'PerfectTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'PerfectTree1_@name_suffix@’
used items: <none>
static-construction object ‘$krep14_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep13_@name_suffix@’
static-construction object ‘$krep13_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcPerfectTree’
named item ‘$krep12_@name_suffix@’
static-construction object ‘$krep12_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘[]’
static-construction object ‘$tcPerfectTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -413,12 +413,12 @@ objects:
named item ‘$tcPerfectTree2_@name_suffix@’
named item ‘krep$*Arr*’
static-construction object ‘$tcPerfectTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tcPerfectTree1_@name_suffix@’
used items: <none>
static-construction object ‘$tc'Node’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -429,33 +429,33 @@ objects:
named item ‘$tc'Node2_@name_suffix@’
named item ‘$krep11_@name_suffix@’
static-construction object ‘$tc'Node2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Node1_@name_suffix@’
used items: <none>
static-construction object ‘$krep11_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep7_@name_suffix@’
named item ‘$krep10_@name_suffix@’
static-construction object ‘$krep10_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep_@name_suffix@’
named item ‘$krep9_@name_suffix@’
static-construction object ‘$krep9_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep7_@name_suffix@’
named item ‘$krep7_@name_suffix@’
static-construction object ‘$tc'Leaf’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -466,40 +466,40 @@ objects:
named item ‘$tc'Leaf2_@name_suffix@’
named item ‘$krep8_@name_suffix@’
static-construction object ‘$tc'Leaf2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Leaf1_@name_suffix@’
used items: <none>
static-construction object ‘$krep8_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep7_@name_suffix@’
static-construction object ‘$krep7_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcBinTree’
named item ‘$krep6_@name_suffix@’
static-construction object ‘$krep6_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep5_@name_suffix@’
static-construction object ‘$krep5_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep_@name_suffix@’
named item ‘[]’
static-construction object ‘$tcBinTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -510,79 +510,79 @@ objects:
named item ‘$tcBinTree2_@name_suffix@’
named item ‘krep$*->*->*’
static-construction object ‘$tcBinTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tcBinTree1_@name_suffix@’
used items: <none>
static-construction object ‘$krep4_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcTuple2’
named item ‘$krep3_@name_suffix@’
static-construction object ‘$krep3_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep2_@name_suffix@’
static-construction object ‘$krep2_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘[]’
static-construction object ‘$krep1_@name_suffix@’:
- data constructor name: KindRepVar
+ data constructor: KindRepVar
lifted: yes
literals: word 0
used items: <none>
static-construction object ‘$krep_@name_suffix@’:
- data constructor name: KindRepVar
+ data constructor: KindRepVar
lifted: yes
literals: word 1
used items: <none>
static-construction object ‘$trModule’:
- data constructor name: Module
+ data constructor: Module
lifted: yes
literals: <none>
used items:
named item ‘$trModule2_@name_suffix@’
named item ‘$trModule4_@name_suffix@’
static-construction object ‘$trModule4_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$trModule3_@name_suffix@’
used items: <none>
static-construction object ‘$trModule2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$trModule1_@name_suffix@’
used items: <none>
- ordinary object ‘divides’:
+ object ‘divides’:
arity: 3
literals: <none>
used items:
- ordinary object ‘$dReal_@name_suffix@’:
+ object ‘$dReal_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘$dNum_@name_suffix@’:
+ object ‘$dNum_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘$dEq_@name_suffix@’:
+ object ‘$dEq_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘$dEq1_@name_suffix@’:
+ object ‘$dEq1_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘bcprep_@name_suffix@’:
+ object ‘bcprep_@name_suffix@’:
arity: 5
literals:
top-level string "Example"
@@ -590,13 +590,13 @@ objects:
cost center of breakpoint 15
used items:
break array of module ‘Example’
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 1
literals:
word 0
info table of ‘IS’
used items: named item ‘fromInteger’
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 3
literals:
top-level string "Example"
@@ -605,24 +605,24 @@ objects:
used items:
break array of module ‘Example’
named item ‘mod’
- named item ‘==’
+ named item ‘(==)’
named item ‘$p1Ord’
named item ‘$p2Real’
named item ‘$p1Real’
named item ‘$p1Integral’
- ordinary object ‘Node’:
+ object ‘Node’:
arity: 3
literals: info table of ‘Node’
used items: <none>
- ordinary object ‘Leaf’:
+ object ‘Leaf’:
arity: 1
literals: info table of ‘Leaf’
used items: <none>
- ordinary object ‘Nested’:
+ object ‘Nested’:
arity: 1
literals: info table of ‘Nested’
used items: <none>
- ordinary object ‘PerfectTree’:
+ object ‘PerfectTree’:
arity: 1
literals: info table of ‘PerfectTree’
used items: <none>
=====================================
testsuite/tests/show-bytecode/show-bytecode-hpc.stdout
=====================================
@@ -1,8 +1,8 @@
[1 of 1] Compiling Example ( Example.hs, Example.gbc )
-name: Example
+module: Example
hash: @hash@
objects:
- ordinary object ‘primesPtr’:
+ object ‘primesPtr’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
@@ -12,7 +12,7 @@ objects:
named item ‘$dTypeable2_@name_suffix@’
named item ‘$fIsStaticStaticPtr’
static-construction object ‘static_ptr1’:
- data constructor name: StaticPtr
+ data constructor: StaticPtr
lifted: yes
literals:
word @large_word@
@@ -21,59 +21,59 @@ objects:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: StaticPtrInfo
+ data constructor: StaticPtrInfo
lifted: yes
literals: <none>
used items:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: top-level string "main"
used items:
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: top-level string "Example"
used items:
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: (,)
+ data constructor: (,)
lifted: yes
literals: <none>
used items:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 27
used items: <none>
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 20
used items: <none>
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘primes’
- ordinary object ‘primes2_@name_suffix@’:
+ object ‘primes2_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘primes2_sat_@name_suffix@’:
+ object ‘primes2_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘primes2_sat_@name_suffix@’:
+ object ‘primes2_sat_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
@@ -84,110 +84,110 @@ objects:
named item ‘fromInteger’
named item ‘$fEnumNatural’
named item ‘enumFrom’
- ordinary object ‘primes2_sat_@name_suffix@’:
+ object ‘primes2_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘isPrime_@name_suffix@’
named item ‘filter’
- ordinary object ‘isPrime_@name_suffix@’:
+ object ‘isPrime_@name_suffix@’:
arity: 1
literals:
label ‘_hpc_tickboxes_Example_hpc’
label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘primes’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
named item ‘$fIntegralInteger’
named item ‘$fNumNatural’
- named item ‘^’
- ordinary object ‘v1_@name_suffix@’:
+ named item ‘(^)’
+ object ‘v1_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
word 2
info table of ‘IS’
used items: <none>
- ordinary object ‘pap_@name_suffix@’:
+ object ‘pap_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
named item ‘$fOrdNatural’
- named item ‘<=’
- ordinary object ‘v1_@name_suffix@’:
+ named item ‘(<=)’
+ object ‘v1_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: <none>
- ordinary object ‘pap_@name_suffix@’:
+ object ‘pap_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
- named item ‘.’
+ named item ‘(.)’
named item ‘takeWhile’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘pap_@name_suffix@’:
+ object ‘pap_@name_suffix@’:
arity: 2
literals: <none>
used items:
named item ‘$fIntegralNatural’
named item ‘divides’
- ordinary object ‘v1_@name_suffix@’:
+ object ‘v1_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: <none>
- ordinary object ‘pap_@name_suffix@’:
+ object ‘pap_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
named item ‘$fFoldableList’
named item ‘any’
named item ‘not’
- ordinary object ‘primes’:
+ object ‘primes’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
label ‘_hpc_tickboxes_Example_hpc’
- info table of ‘:’
+ info table of ‘(:)’
used items:
named item ‘primes2_@name_suffix@’
named item ‘primes1_@name_suffix@’
- ordinary object ‘primes1_@name_suffix@’:
+ object ‘primes1_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
@@ -196,7 +196,7 @@ objects:
used items:
named item ‘$fNumNatural’
named item ‘fromInteger’
- ordinary object ‘fibonaccisPtr’:
+ object ‘fibonaccisPtr’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
@@ -206,7 +206,7 @@ objects:
named item ‘$dTypeable2_@name_suffix@’
named item ‘$fIsStaticStaticPtr’
static-construction object ‘static_ptr’:
- data constructor name: StaticPtr
+ data constructor: StaticPtr
lifted: yes
literals:
word @large_word@
@@ -215,92 +215,92 @@ objects:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: StaticPtrInfo
+ data constructor: StaticPtrInfo
lifted: yes
literals: <none>
used items:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: top-level string "main"
used items:
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: top-level string "Example"
used items:
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: (,)
+ data constructor: (,)
lifted: yes
literals: <none>
used items:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 15
used items: <none>
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 24
used items: <none>
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘fibonaccis’
- ordinary object ‘positiveFibonaccis1_@name_suffix@’:
+ object ‘positiveFibonaccis1_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
label ‘_hpc_tickboxes_Example_hpc’
- info table of ‘:’
+ info table of ‘(:)’
used items:
named item ‘positiveFibonaccis2_@name_suffix@’
named item ‘positiveFibonaccis_@name_suffix@’
- ordinary object ‘positiveFibonaccis2_@name_suffix@’:
+ object ‘positiveFibonaccis2_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘positiveFibonaccis2_sat_@name_suffix@’:
+ object ‘positiveFibonaccis2_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘positiveFibonaccis1_@name_suffix@’
- ordinary object ‘positiveFibonaccis2_sat_@name_suffix@’:
+ object ‘positiveFibonaccis2_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘fibonaccis’
- ordinary object ‘positiveFibonaccis2_sat_@name_suffix@’:
+ object ‘positiveFibonaccis2_sat_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
named item ‘$fNumNatural’
- named item ‘+’
+ named item ‘(+)’
named item ‘zipWith’
- ordinary object ‘fibonaccis’:
+ object ‘fibonaccis’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
label ‘_hpc_tickboxes_Example_hpc’
- info table of ‘:’
+ info table of ‘(:)’
used items:
named item ‘fibonaccis2_@name_suffix@’
named item ‘fibonaccis1_@name_suffix@’
- ordinary object ‘fibonaccis2_@name_suffix@’:
+ object ‘fibonaccis2_@name_suffix@’:
arity: 0
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: named item ‘positiveFibonaccis1_@name_suffix@’
- ordinary object ‘positiveFibonaccis_@name_suffix@’:
+ object ‘positiveFibonaccis_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
@@ -309,7 +309,7 @@ objects:
used items:
named item ‘$fNumNatural’
named item ‘fromInteger’
- ordinary object ‘fibonaccis1_@name_suffix@’:
+ object ‘fibonaccis1_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
@@ -318,27 +318,27 @@ objects:
used items:
named item ‘$fNumNatural’
named item ‘fromInteger’
- ordinary object ‘$dTypeable2_@name_suffix@’:
+ object ‘$dTypeable2_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$dTypeable_@name_suffix@’
named item ‘$dTypeable1_@name_suffix@’
named item ‘mkTrAppChecked’
- ordinary object ‘$dTypeable1_@name_suffix@’:
+ object ‘$dTypeable1_@name_suffix@’:
arity: 0
literals: info table of ‘[]’
used items:
named item ‘$tcList’
named item ‘mkTrCon’
- ordinary object ‘$dTypeable_@name_suffix@’:
+ object ‘$dTypeable_@name_suffix@’:
arity: 0
literals: info table of ‘[]’
used items:
named item ‘$tcNatural’
named item ‘mkTrCon’
static-construction object ‘$tc'Nested’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -349,33 +349,33 @@ objects:
named item ‘$tc'Nested2_@name_suffix@’
named item ‘$krep17_@name_suffix@’
static-construction object ‘$tc'Nested2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Nested1_@name_suffix@’
used items: <none>
static-construction object ‘$krep17_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep16_@name_suffix@’
named item ‘$krep13_@name_suffix@’
static-construction object ‘$krep16_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcPerfectTree’
named item ‘$krep15_@name_suffix@’
static-construction object ‘$krep15_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep4_@name_suffix@’
named item ‘[]’
static-construction object ‘$tc'PerfectTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -386,33 +386,33 @@ objects:
named item ‘$tc'PerfectTree2_@name_suffix@’
named item ‘$krep14_@name_suffix@’
static-construction object ‘$tc'PerfectTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'PerfectTree1_@name_suffix@’
used items: <none>
static-construction object ‘$krep14_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep13_@name_suffix@’
static-construction object ‘$krep13_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcPerfectTree’
named item ‘$krep12_@name_suffix@’
static-construction object ‘$krep12_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘[]’
static-construction object ‘$tcPerfectTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -423,12 +423,12 @@ objects:
named item ‘$tcPerfectTree2_@name_suffix@’
named item ‘krep$*Arr*’
static-construction object ‘$tcPerfectTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tcPerfectTree1_@name_suffix@’
used items: <none>
static-construction object ‘$tc'Node’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -439,33 +439,33 @@ objects:
named item ‘$tc'Node2_@name_suffix@’
named item ‘$krep11_@name_suffix@’
static-construction object ‘$tc'Node2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Node1_@name_suffix@’
used items: <none>
static-construction object ‘$krep11_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep7_@name_suffix@’
named item ‘$krep10_@name_suffix@’
static-construction object ‘$krep10_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep_@name_suffix@’
named item ‘$krep9_@name_suffix@’
static-construction object ‘$krep9_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep7_@name_suffix@’
named item ‘$krep7_@name_suffix@’
static-construction object ‘$tc'Leaf’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -476,40 +476,40 @@ objects:
named item ‘$tc'Leaf2_@name_suffix@’
named item ‘$krep8_@name_suffix@’
static-construction object ‘$tc'Leaf2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Leaf1_@name_suffix@’
used items: <none>
static-construction object ‘$krep8_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep7_@name_suffix@’
static-construction object ‘$krep7_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcBinTree’
named item ‘$krep6_@name_suffix@’
static-construction object ‘$krep6_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep5_@name_suffix@’
static-construction object ‘$krep5_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep_@name_suffix@’
named item ‘[]’
static-construction object ‘$tcBinTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -520,117 +520,117 @@ objects:
named item ‘$tcBinTree2_@name_suffix@’
named item ‘krep$*->*->*’
static-construction object ‘$tcBinTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tcBinTree1_@name_suffix@’
used items: <none>
static-construction object ‘$krep4_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcTuple2’
named item ‘$krep3_@name_suffix@’
static-construction object ‘$krep3_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep2_@name_suffix@’
static-construction object ‘$krep2_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘[]’
static-construction object ‘$krep1_@name_suffix@’:
- data constructor name: KindRepVar
+ data constructor: KindRepVar
lifted: yes
literals: word 0
used items: <none>
static-construction object ‘$krep_@name_suffix@’:
- data constructor name: KindRepVar
+ data constructor: KindRepVar
lifted: yes
literals: word 1
used items: <none>
static-construction object ‘$trModule’:
- data constructor name: Module
+ data constructor: Module
lifted: yes
literals: <none>
used items:
named item ‘$trModule2_@name_suffix@’
named item ‘$trModule4_@name_suffix@’
static-construction object ‘$trModule4_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$trModule3_@name_suffix@’
used items: <none>
static-construction object ‘$trModule2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$trModule1_@name_suffix@’
used items: <none>
- ordinary object ‘divides’:
+ object ‘divides’:
arity: 3
literals: <none>
used items:
- ordinary object ‘$dReal_@name_suffix@’:
+ object ‘$dReal_@name_suffix@’:
arity: 0
literals:
label ‘_hpc_tickboxes_Example_hpc’
label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 1
literals:
label ‘_hpc_tickboxes_Example_hpc’
word 0
info table of ‘IS’
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘fromInteger’
named item ‘$p1Real’
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 3
literals: label ‘_hpc_tickboxes_Example_hpc’
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: <none>
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 1
literals: label ‘_hpc_tickboxes_Example_hpc’
used items: <none>
named item ‘mod’
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 0
literals: <none>
- used items: named item ‘==’
+ used items: named item ‘(==)’
named item ‘$p1Ord’
named item ‘$p2Real’
named item ‘$p1Integral’
- ordinary object ‘Node’:
+ object ‘Node’:
arity: 3
literals: info table of ‘Node’
used items: <none>
- ordinary object ‘Leaf’:
+ object ‘Leaf’:
arity: 1
literals: info table of ‘Leaf’
used items: <none>
- ordinary object ‘Nested’:
+ object ‘Nested’:
arity: 1
literals: info table of ‘Nested’
used items: <none>
- ordinary object ‘PerfectTree’:
+ object ‘PerfectTree’:
arity: 1
literals: info table of ‘PerfectTree’
used items: <none>
@@ -662,7 +662,6 @@ static-pointer table entries:
@hash@: static_ptr1
HPC information:
hash: @hash@
- module name: Example
- tick box name: _hpc_tickboxes_Example_hpc
+ tick box: _hpc_tickboxes_Example_hpc
number of ticks: 45
=====================================
testsuite/tests/show-bytecode/show-bytecode-vanilla.stdout
=====================================
@@ -1,8 +1,8 @@
[1 of 1] Compiling Example ( Example.hs, Example.gbc )
-name: Example
+module: Example
hash: @hash@
objects:
- ordinary object ‘primesPtr’:
+ object ‘primesPtr’:
arity: 0
literals: <none>
used items:
@@ -10,7 +10,7 @@ objects:
named item ‘$dTypeable2_@name_suffix@’
named item ‘$fIsStaticStaticPtr’
static-construction object ‘static_ptr1’:
- data constructor name: StaticPtr
+ data constructor: StaticPtr
lifted: yes
literals:
word @large_word@
@@ -19,96 +19,96 @@ objects:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘primes’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: StaticPtrInfo
+ data constructor: StaticPtrInfo
lifted: yes
literals: <none>
used items:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: top-level string "main"
used items:
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: top-level string "Example"
used items:
- ordinary object ‘static_ptr1_sat_@name_suffix@’:
+ object ‘static_ptr1_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: (,)
+ data constructor: (,)
lifted: yes
literals: <none>
used items:
named item ‘static_ptr1_sat_@name_suffix@’
named item ‘static_ptr1_sat_@name_suffix@’
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 27
used items: <none>
static-construction object ‘static_ptr1_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 20
used items: <none>
- ordinary object ‘primes2_@name_suffix@’:
+ object ‘primes2_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘primes2_sat_@name_suffix@’
named item ‘isPrime_@name_suffix@’
named item ‘filter’
- ordinary object ‘isPrime_@name_suffix@’:
+ object ‘isPrime_@name_suffix@’:
arity: 1
literals: <none>
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: <none>
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals: <none>
used items:
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 1
literals:
word 2
info table of ‘IS’
used items:
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$fIntegralInteger’
named item ‘$fNumNatural’
- named item ‘^’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ named item ‘(^)’
+ object ‘isPrime_sat_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
- ordinary object ‘v_@name_suffix@’:
+ object ‘v_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$fOrdNatural’
- named item ‘<=’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ named item ‘(<=)’
+ object ‘isPrime_sat_@name_suffix@’:
arity: 3
literals: <none>
used items: <none>
- named item ‘.’
+ named item ‘(.)’
named item ‘primes’
named item ‘takeWhile’
- ordinary object ‘isPrime_sat_@name_suffix@’:
+ object ‘isPrime_sat_@name_suffix@’:
arity: 2
literals: <none>
used items:
@@ -118,17 +118,17 @@ objects:
named item ‘any’
named item ‘not’
static-construction object ‘primes’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘primes1_@name_suffix@’
named item ‘primes2_@name_suffix@’
- ordinary object ‘primes2_sat_@name_suffix@’:
+ object ‘primes2_sat_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘primes2_sat_@name_suffix@’:
+ object ‘primes2_sat_@name_suffix@’:
arity: 0
literals:
word 3
@@ -138,7 +138,7 @@ objects:
named item ‘fromInteger’
named item ‘$fEnumNatural’
named item ‘enumFrom’
- ordinary object ‘primes1_@name_suffix@’:
+ object ‘primes1_@name_suffix@’:
arity: 0
literals: <none>
used items:
@@ -146,11 +146,11 @@ objects:
named item ‘$fNumNatural’
named item ‘fromInteger’
static-construction object ‘primes1_sat_@name_suffix@’:
- data constructor name: IS
+ data constructor: IS
lifted: yes
literals: word 2
used items: <none>
- ordinary object ‘fibonaccisPtr’:
+ object ‘fibonaccisPtr’:
arity: 0
literals: <none>
used items:
@@ -158,7 +158,7 @@ objects:
named item ‘$dTypeable2_@name_suffix@’
named item ‘$fIsStaticStaticPtr’
static-construction object ‘static_ptr’:
- data constructor name: StaticPtr
+ data constructor: StaticPtr
lifted: yes
literals:
word @large_word@
@@ -167,47 +167,47 @@ objects:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘fibonaccis’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: StaticPtrInfo
+ data constructor: StaticPtrInfo
lifted: yes
literals: <none>
used items:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: top-level string "main"
used items:
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: top-level string "Example"
used items:
- ordinary object ‘static_ptr_sat_@name_suffix@’:
+ object ‘static_ptr_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘unpackCString#’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: (,)
+ data constructor: (,)
lifted: yes
literals: <none>
used items:
named item ‘static_ptr_sat_@name_suffix@’
named item ‘static_ptr_sat_@name_suffix@’
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 15
used items: <none>
static-construction object ‘static_ptr_sat_@name_suffix@’:
- data constructor name: I#
+ data constructor: I#
lifted: yes
literals: word 24
used items: <none>
- ordinary object ‘positiveFibonaccis2_@name_suffix@’:
+ object ‘positiveFibonaccis2_@name_suffix@’:
arity: 0
literals: <none>
used items:
@@ -216,26 +216,26 @@ objects:
named item ‘positiveFibonaccis2_sat_@name_suffix@’
named item ‘zipWith’
static-construction object ‘positiveFibonaccis1_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘positiveFibonaccis_@name_suffix@’
named item ‘positiveFibonaccis2_@name_suffix@’
static-construction object ‘fibonaccis’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘fibonaccis1_@name_suffix@’
named item ‘positiveFibonaccis1_@name_suffix@’
- ordinary object ‘positiveFibonaccis2_sat_@name_suffix@’:
+ object ‘positiveFibonaccis2_sat_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$fNumNatural’
- named item ‘+’
- ordinary object ‘positiveFibonaccis_@name_suffix@’:
+ named item ‘(+)’
+ object ‘positiveFibonaccis_@name_suffix@’:
arity: 0
literals: <none>
used items:
@@ -243,11 +243,11 @@ objects:
named item ‘$fNumNatural’
named item ‘fromInteger’
static-construction object ‘positiveFibonaccis_sat_@name_suffix@’:
- data constructor name: IS
+ data constructor: IS
lifted: yes
literals: word 1
used items: <none>
- ordinary object ‘fibonaccis1_@name_suffix@’:
+ object ‘fibonaccis1_@name_suffix@’:
arity: 0
literals: <none>
used items:
@@ -255,31 +255,31 @@ objects:
named item ‘$fNumNatural’
named item ‘fromInteger’
static-construction object ‘fibonaccis1_sat_@name_suffix@’:
- data constructor name: IS
+ data constructor: IS
lifted: yes
literals: word 0
used items: <none>
- ordinary object ‘$dTypeable2_@name_suffix@’:
+ object ‘$dTypeable2_@name_suffix@’:
arity: 0
literals: <none>
used items:
named item ‘$dTypeable_@name_suffix@’
named item ‘$dTypeable1_@name_suffix@’
named item ‘mkTrAppChecked’
- ordinary object ‘$dTypeable1_@name_suffix@’:
+ object ‘$dTypeable1_@name_suffix@’:
arity: 0
literals: info table of ‘[]’
used items:
named item ‘$tcList’
named item ‘mkTrCon’
- ordinary object ‘$dTypeable_@name_suffix@’:
+ object ‘$dTypeable_@name_suffix@’:
arity: 0
literals: info table of ‘[]’
used items:
named item ‘$tcNatural’
named item ‘mkTrCon’
static-construction object ‘$tc'Nested’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -290,33 +290,33 @@ objects:
named item ‘$tc'Nested2_@name_suffix@’
named item ‘$krep17_@name_suffix@’
static-construction object ‘$tc'Nested2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Nested1_@name_suffix@’
used items: <none>
static-construction object ‘$krep17_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep16_@name_suffix@’
named item ‘$krep13_@name_suffix@’
static-construction object ‘$krep16_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcPerfectTree’
named item ‘$krep15_@name_suffix@’
static-construction object ‘$krep15_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep4_@name_suffix@’
named item ‘[]’
static-construction object ‘$tc'PerfectTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -327,33 +327,33 @@ objects:
named item ‘$tc'PerfectTree2_@name_suffix@’
named item ‘$krep14_@name_suffix@’
static-construction object ‘$tc'PerfectTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'PerfectTree1_@name_suffix@’
used items: <none>
static-construction object ‘$krep14_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep13_@name_suffix@’
static-construction object ‘$krep13_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcPerfectTree’
named item ‘$krep12_@name_suffix@’
static-construction object ‘$krep12_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘[]’
static-construction object ‘$tcPerfectTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -364,12 +364,12 @@ objects:
named item ‘$tcPerfectTree2_@name_suffix@’
named item ‘krep$*Arr*’
static-construction object ‘$tcPerfectTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tcPerfectTree1_@name_suffix@’
used items: <none>
static-construction object ‘$tc'Node’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -380,33 +380,33 @@ objects:
named item ‘$tc'Node2_@name_suffix@’
named item ‘$krep11_@name_suffix@’
static-construction object ‘$tc'Node2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Node1_@name_suffix@’
used items: <none>
static-construction object ‘$krep11_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep7_@name_suffix@’
named item ‘$krep10_@name_suffix@’
static-construction object ‘$krep10_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep_@name_suffix@’
named item ‘$krep9_@name_suffix@’
static-construction object ‘$krep9_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep7_@name_suffix@’
named item ‘$krep7_@name_suffix@’
static-construction object ‘$tc'Leaf’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -417,40 +417,40 @@ objects:
named item ‘$tc'Leaf2_@name_suffix@’
named item ‘$krep8_@name_suffix@’
static-construction object ‘$tc'Leaf2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tc'Leaf1_@name_suffix@’
used items: <none>
static-construction object ‘$krep8_@name_suffix@’:
- data constructor name: KindRepFun
+ data constructor: KindRepFun
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep7_@name_suffix@’
static-construction object ‘$krep7_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcBinTree’
named item ‘$krep6_@name_suffix@’
static-construction object ‘$krep6_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep5_@name_suffix@’
static-construction object ‘$krep5_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep_@name_suffix@’
named item ‘[]’
static-construction object ‘$tcBinTree’:
- data constructor name: TyCon
+ data constructor: TyCon
lifted: yes
literals:
word @large_word@
@@ -461,105 +461,105 @@ objects:
named item ‘$tcBinTree2_@name_suffix@’
named item ‘krep$*->*->*’
static-construction object ‘$tcBinTree2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$tcBinTree1_@name_suffix@’
used items: <none>
static-construction object ‘$krep4_@name_suffix@’:
- data constructor name: KindRepTyConApp
+ data constructor: KindRepTyConApp
lifted: yes
literals: <none>
used items:
named item ‘$tcTuple2’
named item ‘$krep3_@name_suffix@’
static-construction object ‘$krep3_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘$krep2_@name_suffix@’
static-construction object ‘$krep2_@name_suffix@’:
- data constructor name: :
+ data constructor: (:)
lifted: yes
literals: <none>
used items:
named item ‘$krep1_@name_suffix@’
named item ‘[]’
static-construction object ‘$krep1_@name_suffix@’:
- data constructor name: KindRepVar
+ data constructor: KindRepVar
lifted: yes
literals: word 0
used items: <none>
static-construction object ‘$krep_@name_suffix@’:
- data constructor name: KindRepVar
+ data constructor: KindRepVar
lifted: yes
literals: word 1
used items: <none>
static-construction object ‘$trModule’:
- data constructor name: Module
+ data constructor: Module
lifted: yes
literals: <none>
used items:
named item ‘$trModule2_@name_suffix@’
named item ‘$trModule4_@name_suffix@’
static-construction object ‘$trModule4_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$trModule3_@name_suffix@’
used items: <none>
static-construction object ‘$trModule2_@name_suffix@’:
- data constructor name: TrNameS
+ data constructor: TrNameS
lifted: yes
literals: address ‘$trModule1_@name_suffix@’
used items: <none>
- ordinary object ‘divides’:
+ object ‘divides’:
arity: 3
literals: <none>
used items:
- ordinary object ‘$dReal_@name_suffix@’:
+ object ‘$dReal_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 1
literals:
word 0
info table of ‘IS’
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 0
literals: <none>
used items: named item ‘fromInteger’
named item ‘$p1Real’
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 3
literals: <none>
used items: named item ‘mod’
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 0
literals: <none>
used items:
- ordinary object ‘divides_sat_@name_suffix@’:
+ object ‘divides_sat_@name_suffix@’:
arity: 0
literals: <none>
- used items: named item ‘==’
+ used items: named item ‘(==)’
named item ‘$p1Ord’
named item ‘$p2Real’
named item ‘$p1Integral’
- ordinary object ‘Node’:
+ object ‘Node’:
arity: 3
literals: info table of ‘Node’
used items: <none>
- ordinary object ‘Leaf’:
+ object ‘Leaf’:
arity: 1
literals: info table of ‘Leaf’
used items: <none>
- ordinary object ‘Nested’:
+ object ‘Nested’:
arity: 1
literals: info table of ‘Nested’
used items: <none>
- ordinary object ‘PerfectTree’:
+ object ‘PerfectTree’:
arity: 1
literals: info table of ‘PerfectTree’
used items: <none>
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/58e096ccdf89e8a7f413b6c5fc3fca…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/58e096ccdf89e8a7f413b6c5fc3fca…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/sjakobi/nonmoving-gc-test-fixes] testsuite: Make listThreads1 insensitive to the RTS's own threads
by Simon Jakobi (@sjakobi) 30 Jul '26
by Simon Jakobi (@sjakobi) 30 Jul '26
30 Jul '26
Simon Jakobi pushed to branch wip/sjakobi/nonmoving-gc-test-fixes at Glasgow Haskell Compiler / GHC
Commits:
1ac1d554 by Simon Jakobi at 2026-07-30T10:43:09+02:00
testsuite: Make listThreads1 insensitive to the RTS's own threads
listThreads1 expected `listThreads` to return exactly [ThreadId 1]. That
holds only under a non-threaded RTS. Under a threaded RTS however there
are more threads present, so we change the test to simply check that
`myThreadId` is present in the list.
Assisted-by: Claude Opus 5
- - - - -
2 changed files:
- libraries/base/tests/listThreads1.hs
- libraries/base/tests/listThreads1.stdout
Changes:
=====================================
libraries/base/tests/listThreads1.hs
=====================================
@@ -2,5 +2,10 @@ module Main where
import GHC.Conc.Sync
+-- Regression test for the JS backend's ListThreadsOp, which used to omit the
+-- running thread. Whatever other threads the RTS has is irrelevant here.
main :: IO ()
-main = listThreads >>= print
+main = do
+ tid <- myThreadId
+ ts <- listThreads
+ print (tid `elem` ts)
=====================================
libraries/base/tests/listThreads1.stdout
=====================================
@@ -1 +1 @@
-[ThreadId 1]
+True
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1ac1d5549cd160d095e42d3b42fdac8…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/1ac1d5549cd160d095e42d3b42fdac8…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/andreask/arm-ffi] 2 commits: cmm: Expand size annotations to more operators with -dppr-debug
by Andreas Klebinger (@AndreasK) 30 Jul '26
by Andreas Klebinger (@AndreasK) 30 Jul '26
30 Jul '26
Andreas Klebinger pushed to branch wip/andreask/arm-ffi at Glasgow Haskell Compiler / GHC
Commits:
e3e35453 by Andreas Klebinger at 2026-07-29T20:13:25+00:00
cmm: Expand size annotations to more operators with -dppr-debug
- - - - -
32f219c8 by Andreas Klebinger at 2026-07-29T22:20:46+00:00
arm ncg: Fix bitmask immediates being too large.
We now use the appropriate bitmask width for the *operation* rather than the one of literal operand.
- - - - -
2 changed files:
- compiler/GHC/Cmm/Expr.hs
- compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
Changes:
=====================================
compiler/GHC/Cmm/Expr.hs
=====================================
@@ -552,11 +552,11 @@ genMachOp platform mop args
infixMachOp :: MachOp -> Maybe SDoc
infixMachOp mop
= case mop of
- MO_And _ -> Just $ char '&'
- MO_Or _ -> Just $ char '|'
- MO_Xor _ -> Just $ char '^'
- MO_Not _ -> Just $ char '~'
- MO_S_Neg _ -> Just $ char '-' -- there is no unsigned neg :)
+ MO_And w -> Just $ withDebugWidth w $ char '&'
+ MO_Or w -> Just $ withDebugWidth w $ char '|'
+ MO_Xor w -> Just $ withDebugWidth w $ char '^'
+ MO_Not w -> Just $ withDebugWidth w $ char '~'
+ MO_S_Neg w -> Just $ withDebugWidth w $ char '-' -- there is no unsigned neg :)
_ -> Nothing
-- --------------------------------------------------------------------------
=====================================
compiler/GHC/CmmToAsm/AArch64/CodeGen.hs
=====================================
@@ -1184,14 +1184,14 @@ getRegister' config plat expr
return $ Any (intFormat w) (\dst -> code_x `snocOL` annExpr expr (LSR (OpReg w dst) (OpReg w reg_x) (OpImm (ImmInteger n))))
-- 3. Logic &&, ||
- CmmMachOp (MO_And w) [(CmmReg reg), CmmLit (CmmInt n _)] | isAArch64Bitmask (opRegWidth w') (fromIntegral n) ->
- return $ Any fmt (\d -> unitOL $ annExpr expr (AND fmt (OpReg w d) (OpReg w' r') (OpImm (ImmInteger n))))
+ CmmMachOp (MO_And w) [(CmmReg reg), CmmLit (CmmInt n _)] | Just op_bitmask <- getBitmaskImm n (opRegWidth w) ->
+ return $ Any fmt (\d -> unitOL $ annExpr expr (AND fmt (OpReg w d) (OpReg w' r') op_bitmask))
where fmt = intFormat w
w' = formatToWidth (cmmTypeFormat (cmmRegType reg))
r' = getRegisterReg plat reg
- CmmMachOp (MO_Or w) [(CmmReg reg), CmmLit (CmmInt n _)] | isAArch64Bitmask (opRegWidth w') (fromIntegral n) ->
- return $ Any fmt (\d -> unitOL $ annExpr expr (ORR fmt (OpReg w d) (OpReg w' r') (OpImm (ImmInteger n))))
+ CmmMachOp (MO_Or w) [(CmmReg reg), CmmLit (CmmInt n _)] | Just op_bitmask <- getBitmaskImm n (opRegWidth w) ->
+ return $ Any fmt (\d -> unitOL $ annExpr expr (ORR fmt (OpReg w d) (OpReg w' r') op_bitmask))
where fmt = intFormat w
w' = formatToWidth (cmmTypeFormat (cmmRegType reg))
r' = getRegisterReg plat reg
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7a96d43048cde2fc2236b06d06b39c…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/7a96d43048cde2fc2236b06d06b39c…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0
[Git][ghc/ghc][wip/supersven/hadrian-cross-stage3] 20 commits: Introduce global unit database cache
by Sven Tennie (@supersven) 30 Jul '26
by Sven Tennie (@supersven) 30 Jul '26
30 Jul '26
Sven Tennie pushed to branch wip/supersven/hadrian-cross-stage3 at Glasgow Haskell Compiler / GHC
Commits:
5d0ab71a by fendor at 2026-07-27T17:31:05-04:00
Introduce global unit database cache
As a first step for better sharing of `UnitInfo` across `UnitEnv`,
we introduce a new datatype called `ExternalUnitDatabases`.
It primarily serves as an in-memory representation of *all*
`UnitDatabase`s across `UnitEnv`. This means, if multiple `HomeUnitEnv`s
depend on the same database, one way or another, we make sure that we
don't parse from disk every time.
Instead, we store the in-memory representation in `ExternalUnitDatabases`.
`ExternalUnitDatabaseCache` is the equivalent of `ExternalUnitState` in
the `UnitEnv`. It is a mutable variable wrapping `ExternalUnitDatabases`.
The mutable `ExternalUnitDatabaseCache` is used in `initUnits` to make
sure we don't parse the same unit database multiple times.
Almost by accident, we change the semantics of `initUnits` to honour
modifications to `packageDBFlags`.
The inability to change `packageDBFlags` while also reusing the already
parsed `UnitDatabase`s was reported in #26423 as a bug.
Hence, we think this behaviour change is warranted and acceptable,
especially since it comes with a breaking change to the `initUnits` API.
Add regression test for #26423
Closes #26423
- - - - -
6cce494a by fendor at 2026-07-27T17:31:05-04:00
Introduce UnitIndex for global external unit caching
`UnitInfo`s have been observed to cause a lot of memory usage in #27500.
Especially with multiple home units, as the same (external) units are
processed from scratch, even though most of the time we end up with
exactly the same `UnitInfo`.
We introduce a `UnitEnv` global cache that allows us to store external
unit information that is used across all `HomeUnitEnv`s.
The most important change in this commit is the introduction of the `UnitIndex`.
It stores a global mapping of `UnitId` -> `UnitInfo`, and `initUnits`
always uses the cached `UnitInfo` entry to populate each
`HomeUnitEnv`'s `UnitState`.
This allows us to ensure the following property:
> Each `UnitInfo` should be alive exactly once in GHC.
All `UnitState`s should reference 'UnitInfo's stored in the 'UnitIndex'.
This ensured by calling 'initUnits' with the 'UnitIndex'.
In addition, the `ExternalUnitDatabases` may also hold a reference
to each on-disk representation of `UnitInfo`.
This means, we impose an hard upper bound on the number of `UnitInfo`s
alive in the GHC session:
> The number of alive `UnitInfo`s closure objects must be the
> sum of all loaded unit database times two.
We add performance regression tests that make sure the number of live
`UnitInfo` cannot exceed this threshold.
Closes #27500
-------------------------
Metric Decrease:
MultiComponentModules
MultiComponentModulesRecomp
MultiComponentModulesRecomp100
mhu-perf
LinkableUsage02
-------------------------
These metrics increases are especially notable, as we are not even
sharing anything big but merely the global package database with 50
entries.
It shows how careful sharing of `UnitInfo` can improve memory usage.
We expect this to be much more notable when the whole cabal package
database is shared across multiple home units.
`LinkableUsage02` metric decreases on unreg and i386 platform, only.
---
Technical details
To share the `UnitInfo`s correctly, it is important that we extract
the `WireMap` into the `UnitIndex`. At the moment of writing, `WireMap`
must be globally the same for all `HomeUnitEnv`s.
This is important, as we could otherwise not cache the "fully-resolved"
`UnitInfo`, as we don't change the `UnitId` or `unitAbiHash` when
resolving wired-in units. Thus, there could be ambiguities, when the
`WireMap` is not the same for all `UnitState`s across the `UnitEnv`.
We consider a `UnitInfo` fully-resolved, if wired-in units have been
updated, the `UnitInfo` has been validated and variables in the unit
config, such as `${pkgroot}` have been resolved.
Updating the wired-in units requires the `WireMap` to be globally the
same.
- - - - -
f8e3bee9 by Zubin Duggal at 2026-07-27T17:31:49-04:00
testsuite: skip runtime stats tests on debugged compilers
Debugged flavours build the boot libraries without optimisation, so the
runtime numbers do not match the baselines.
- - - - -
1e326770 by Zubin Duggal at 2026-07-27T17:31:50-04:00
testsuite: mark #20706 tests fragile rather than broken
Whether the static linux linker issues manifest depends on the host
toolchain.
- - - - -
c0b13cbe by Zubin Duggal at 2026-07-27T17:31:50-04:00
testsuite: exclude libnuma from mostly-static
It needs static system libraries (libnuma.a) that many platforms do not
ship.
Fixes #26914
- - - - -
bee1913d by Alan Zimmerman at 2026-07-28T16:42:29-04:00
EPA: ClsInstDecl with decls as [LHsDecl GhcPs] in GhcPs
Similar to 4fdfe75731e01dad7d7fa474c2703d0d3965afb1, this commit
changes the as-parsed representation of class instance declarations to
[LHsDecl GhcPs], and only separates them by type from the renamer onward.
This also allows us to remove all the AnnSortKey machinery for exact
printing, as it is now no longer needed.
- - - - -
72c55eee by Cheng Shao at 2026-07-28T16:43:11-04:00
hadrian: implement and use writeFileAtomic to fix race condition
This patch implements `writeFileAtomic` in hadrian and change all
invocations of shake non-atomic `writeFile'` to use `writeFileAtomic`,
to avoid multiple hadrian concurrent invocations overwriting the same
in-tree generated file not in the build root directory. Fixes #27536.
Additional notes:
- `writeFileChanged`/`writeFileChangedBS` cannot be made atomic since
it involves reading the file's older version, so their uses are left
alone. It doesn't affect #27536 given their outputs are contained in
the build root directory.
- It's possible to shrink this patch by only making writes outside the
build root directory atomic. But I think it's not worth the effort
for fine grained distinction here, and atomic writes within the
build root directory should also improve robustness of a hadrian
build.
- In the longer term we do want to make a ghc build only generate
files within the build root directory, though that's a lot of work
and outside the scope of this particular bugfix.
Co-authored-by: Codex <codex(a)openai.com>
- - - - -
46d4f963 by Sylvain Henry at 2026-07-29T06:38:40-04:00
RTS: correctly mark slop bytes when shrinking large arrays (#19048)
Correctly mark slop bytes even when profiling is off so that heap census
doesn't traverse garbage-collected closures.
- - - - -
4762a8bf by Simon Jakobi at 2026-07-29T06:39:23-04:00
Add -XLazyFieldAnnotations (GHC proposal 752)
Unbundle the prefix `~` lazy field annotation syntax from StrictData. The
new LazyFieldAnnotations extension controls whether `~` is accepted on
constructor fields. StrictData (and Strict, transitively) imply the new
extension.
See https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0752-l….
Closes #24455.
Assisted-by: Claude Opus 4.8
- - - - -
0b6dcc84 by Simon Jakobi at 2026-07-29T06:40:04-04:00
testsuite: Relax T24471 residency tolerance
T24471 peak residency fluctuates enough on i386 to cause spurious
failures. Use the standard residency tolerance while retaining the
existing allocation threshold.
See https://gitlab.haskell.org/ghc/ghc/-/work_items/24471#note_682303.
Assisted-by: gpt-5.6-sol via Codex CLI
- - - - -
90e95b34 by Cheng Shao at 2026-07-29T06:40:45-04:00
compiler: fix missing top-level procedure labels in cmm dumps
This patch fixes missing top-level procedure labels in some
intermediate Cmm pass dumps. Fixes #27553.
Co-authored-by: Codex <codex(a)openai.com>
- - - - -
360a5946 by sheaf at 2026-07-29T06:41:35-04:00
Add some type-family-heavy performance tests
FamAppCachePerf stress-tests the performance of lookups in the
type family application cache.
T27336 is a minimisation extracted from the reported reproducer.
SimplCastPerf is a measure of coercion growth due to the simplifier
calling mkTransCo without re-optimising the result.
- - - - -
7d79915f by Sven Tennie at 2026-07-30T08:29:23+02:00
hadrian: Add stage3 cross-bindist target with separate output folder
Add a 'binary-dist-stage3' target that packages target executables
(produced by the stage2 cross-compiler) into a separate
'bindist-stage3/' folder, distinct from the stage2 cross-compiler
bindist in 'bindist/'.
Key changes:
- BindistConfig: add 'bindistFolder' field so each config knows its
parent output folder. crossBindist uses 'bindist', targetBindist
uses 'bindist-stage3'. implicitBindistConfig now considers
finalStage to pick targetBindist for stage3 builds.
- BinaryDist:
- Drive configure/Makefile/install-file rules for both folders via
forM_ instead of a single 'bindist' path; per-stage distrib
directory avoids autoreconf races.
- binary-dist-stage3 phony outputs to 'bindist-stage3'.
- generateSettings is passed the compiler stage explicitly; ghc-pkg
recache uses the executable_stage builder.
- pkgToWrappers honors the supplied stage for program naming.
- Generate: per-stage configure.ac templates (templateRuleForStages)
with correct Build/Host platform interpolation for stage3 (target =
host = build). generateSettings takes the compiler stage as a
parameter rather than inferring it as predStage.
- CabalReinstall: use executable_stage from implicitBindistConfig
instead of hard-coded Stage2 for wrapper generation.
This allows a single cross-compile to produce both a cross-compiler
bindist (x86_64 host) and a target-architecture bindist (e.g. RISC-V)
that can be installed and run natively on the target.
- - - - -
4b478a5f by Sven Tennie at 2026-07-30T08:29:23+02:00
ci: Combine cross stage2 and stage3 bindists in one job
Rename crossConfig to stage2CrossConfig for clarity and turn the
nightly x86_64-linux-deb13-riscv-cross job into a combined stage3
job (crossStage = Just 3). With CROSS_STAGE=3, build_hadrian invokes
both the 'binary-dist' and 'binary-dist-stage3' targets, then renames
the resulting tarballs via BIN_DIST_NAME and BIN_DIST_NAME_STAGE3.
The combined job produces two artifacts: the cross-compiler bindist
(stage2, runs on x86_64) and the target bindist (stage3, native RISC-V
executables) under their historical names, so downstream consumers
need no changes.
gen_ci.hs:
- stage2CrossConfig replaces crossConfig.
- binDistNameStage3 generates the backward-compatible stage3 artifact
name for jobs with crossStage == Just 3.
- jobVariables advertises BIN_DIST_NAME_STAGE3 for stage3 jobs.
- stage3Artifacts adds the stage3 tarball to artifactPaths.
- cross_jobs: riscv job now sets crossStage = Just 3.
ci.sh:
- CROSS_STAGE=3 builds both binary-dist and binary-dist-stage3.
- After building, rename the stage3 tarball from
_build/bindist-stage3/ to $BIN_DIST_NAME_STAGE3.tar.xz.
- cross_prefix is empty for CROSS_STAGE=3 (target GHC runs natively
on the target, no host-target distinction at install time).
jobs.yaml: regenerated. The riscv job keeps its existing name, now
with CROSS_STAGE=3 and the extra stage3 artifact + variable.
- - - - -
6267f048 by Sven Tennie at 2026-07-30T08:30:21+02:00
Fix: Use library stage for some settings
- - - - -
58298583 by Sven Tennie at 2026-07-30T08:30:39+02:00
CI: Use final cross stage wording more consistently
- - - - -
6ce80f83 by Sven Tennie at 2026-07-30T08:30:45+02:00
Fix typo
- - - - -
f6a690a1 by Sven Tennie at 2026-07-30T08:30:50+02:00
Fix wrapper - use executable stage
- - - - -
4f7e178d by Sven Tennie at 2026-07-30T08:30:56+02:00
Cleanup
- - - - -
68514b9b by Sven Tennie at 2026-07-30T08:44:14+02:00
Add changelog
- - - - -
146 changed files:
- .gitignore
- .gitlab/ci.sh
- .gitlab/generate-ci/gen_ci.hs
- .gitlab/jobs.yaml
- + changelog.d/T26423
- + changelog.d/fix-cmm-dump-labels
- + changelog.d/fix-heap-census-large-arrays-19048
- + changelog.d/lazy-field-annotations
- + changelog.d/stage3-cross-bindists
- + changelog.d/unit-index
- compiler/GHC.hs
- compiler/GHC/Cmm/Pipeline.hs
- compiler/GHC/Driver/Backpack.hs
- compiler/GHC/Driver/Env.hs
- compiler/GHC/Driver/Flags.hs
- compiler/GHC/Driver/Main/Hsc.hs
- compiler/GHC/Driver/Main/Interactive.hs
- compiler/GHC/Driver/Main/Passes.hs
- compiler/GHC/Driver/Session/Units.hs
- compiler/GHC/Hs/Decls.hs
- compiler/GHC/Hs/Instances.hs
- compiler/GHC/Hs/Stats.hs
- compiler/GHC/Hs/Utils.hs
- compiler/GHC/HsToCore/Docs.hs
- compiler/GHC/HsToCore/Quote.hs
- compiler/GHC/Iface/Ext/Ast.hs
- compiler/GHC/Parser.y
- compiler/GHC/Parser/Annotation.hs
- compiler/GHC/Parser/PostProcess.hs
- compiler/GHC/Rename/Module.hs
- compiler/GHC/Rename/Names.hs
- compiler/GHC/Tc/Errors/Ppr.hs
- compiler/GHC/Tc/Errors/Types.hs
- compiler/GHC/Tc/TyCl.hs
- compiler/GHC/Tc/TyCl/Class.hs
- compiler/GHC/Tc/TyCl/Instance.hs
- compiler/GHC/Tc/Utils/Env.hs
- compiler/GHC/ThToHs.hs
- compiler/GHC/Types/Unique.hs
- compiler/GHC/Unit/Env.hs
- + compiler/GHC/Unit/External/Database.hs
- + compiler/GHC/Unit/External/Index.hs
- + compiler/GHC/Unit/External/ModuleOrigin.hs
- + compiler/GHC/Unit/External/Providers.hs
- + compiler/GHC/Unit/External/Query.hs
- + compiler/GHC/Unit/External/Substitution.hs
- + compiler/GHC/Unit/External/Validate.hs
- + compiler/GHC/Unit/External/Visibility.hs
- + compiler/GHC/Unit/External/Wired.hs
- compiler/GHC/Unit/Home/Graph.hs
- compiler/GHC/Unit/Info.hs
- compiler/GHC/Unit/State.hs
- compiler/GHC/Unit/State.hs-boot
- compiler/GHC/Unit/Types.hs
- compiler/Language/Haskell/Syntax/Decls.hs
- compiler/ghc.cabal.in
- distrib/configure.ac.in
- docs/users_guide/exts/strict.rst
- ghc/GHCi/UI.hs
- hadrian/src/BindistConfig.hs
- hadrian/src/Hadrian/Builder/Ar.hs
- hadrian/src/Hadrian/Utilities.hs
- hadrian/src/Rules/BinaryDist.hs
- hadrian/src/Rules/CabalReinstall.hs
- hadrian/src/Rules/Documentation.hs
- hadrian/src/Rules/Generate.hs
- hadrian/src/Rules/Library.hs
- hadrian/src/Rules/Nofib.hs
- hadrian/src/Rules/Program.hs
- hadrian/src/Rules/Register.hs
- hadrian/src/Rules/Rts.hs
- hadrian/src/Rules/SourceDist.hs
- hadrian/src/Rules/Test.hs
- hadrian/src/Rules/ToolArgs.hs
- libraries/ghc-internal/src/GHC/Internal/LanguageExtensions.hs
- rts/Apply.cmm
- rts/ZeroSlop.c → rts/MarkSlop.c
- rts/PrimOps.cmm
- rts/Printer.c
- rts/ProfHeap.c
- rts/RtsFlags.c
- rts/ThreadPaused.c
- rts/include/Cmm.h
- rts/include/rts/storage/ClosureMacros.h
- rts/rts.cabal
- rts/sm/NonMovingMark.c
- rts/sm/Sanity.c
- rts/sm/Storage.c
- testsuite/driver/testlib.py
- testsuite/tests/count-deps/CountDepsParser.stdout
- + testsuite/tests/deSugar/should_run/LazyFieldAnnotationsSemantics.hs
- + testsuite/tests/deSugar/should_run/LazyFieldAnnotationsSemantics.stdout
- testsuite/tests/deSugar/should_run/all.T
- + testsuite/tests/driver/T26423/Hello.hs
- + testsuite/tests/driver/T26423/Makefile
- + testsuite/tests/driver/T26423/T26423.hs
- + testsuite/tests/driver/T26423/T26423.stderr
- + testsuite/tests/driver/T26423/T26423.stdout
- + testsuite/tests/driver/T26423/all.T
- + testsuite/tests/driver/T26423/test/Test.hs
- + testsuite/tests/driver/T26423/test/test.pkg
- testsuite/tests/driver/T4437.hs
- + testsuite/tests/driver/TUnitInfo/Foo.hs
- + testsuite/tests/driver/TUnitInfo/Makefile
- + testsuite/tests/driver/TUnitInfo/all.T
- + testsuite/tests/driver/TUnitInfo/genMhu.sh
- + testsuite/tests/driver/TUnitInfo/generic-unit-info-space-mhu.stdout
- + testsuite/tests/driver/TUnitInfo/generic-unit-info-space-single.stdout
- + testsuite/tests/driver/TUnitInfo/generic-unit-info-space.hs
- + testsuite/tests/driver/TUnitInfo/generic-unit-info-space.stdout
- testsuite/tests/driver/all.T
- testsuite/tests/driver/mostly-static/Makefile
- testsuite/tests/ghci/T13786/all.T
- testsuite/tests/ghci/linking/all.T
- testsuite/tests/ghci/linking/dyn/all.T
- testsuite/tests/haddock/should_compile_flag_haddock/T17544.stderr
- testsuite/tests/interface-stability/template-haskell-exports.stdout
- testsuite/tests/package/T20010/all.T
- testsuite/tests/parser/should_compile/DumpRenamedAst.stderr
- + testsuite/tests/perf/compiler/FamAppCachePerf.hs
- + testsuite/tests/perf/compiler/SimplCastPerf.hs
- + testsuite/tests/perf/compiler/T27336.hs
- testsuite/tests/perf/compiler/all.T
- testsuite/tests/plugins/all.T
- testsuite/tests/printer/Test24533.stdout
- + testsuite/tests/rts/T19048.hs
- + testsuite/tests/rts/T19048.stdout
- testsuite/tests/rts/all.T
- testsuite/tests/rts/linker/all.T
- + testsuite/tests/typecheck/should_compile/LazyFieldAnnotations.hs
- testsuite/tests/typecheck/should_compile/all.T
- testsuite/tests/typecheck/should_fail/LazyFieldsDisabled.stderr
- + testsuite/tests/typecheck/should_fail/LazyFieldsDisabledStrictData.hs
- + testsuite/tests/typecheck/should_fail/LazyFieldsDisabledStrictData.stderr
- testsuite/tests/typecheck/should_fail/all.T
- utils/check-exact/ExactPrint.hs
- utils/check-exact/Utils.hs
- utils/haddock/haddock-api/src/Haddock.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Hoogle.hs
- utils/haddock/haddock-api/src/Haddock/Backends/LaTeX.hs
- utils/haddock/haddock-api/src/Haddock/Backends/Xhtml/Decl.hs
- utils/haddock/haddock-api/src/Haddock/Convert.hs
- utils/haddock/haddock-api/src/Haddock/GhcUtils.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Create.hs
- utils/haddock/haddock-api/src/Haddock/Interface/Rename.hs
- utils/haddock/haddock-api/src/Haddock/Types.hs
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/205065115a0536a5cf1ff7d697cbca…
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/205065115a0536a5cf1ff7d697cbca…
You're receiving this email because of your account on gitlab.haskell.org. Manage all notifications: https://gitlab.haskell.org/-/profile/notifications | Help: https://gitlab.haskell.org/help
1
0