[Git][ghc/ghc][wip/sjakobi/T2057] 2 commits: testsuite: refactor T2057 test layout
Simon Jakobi pushed to branch wip/sjakobi/T2057 at Glasgow Haskell Compiler / GHC Commits: 3180476f by Simon Jakobi at 2026-03-09T01:02:03+01:00 testsuite: refactor T2057 test layout - - - - - 13ab42f4 by Simon Jakobi at 2026-03-09T01:02:21+01:00 testsuite: drop T2057 generated work files - - - - - 14 changed files: - + testsuite/tests/driver/T2057/.gitignore - testsuite/tests/driver/T2057/Makefile - testsuite/tests/driver/T2057/T2057.stderr - testsuite/tests/driver/T2057/all.T - testsuite/tests/driver/T2057/src/app/Main.hs → testsuite/tests/driver/T2057/app/Main.hs - − testsuite/tests/driver/T2057/basepkg-v1.conf.in - − testsuite/tests/driver/T2057/basepkg-v2.conf.in - − testsuite/tests/driver/T2057/dep.conf.in - + testsuite/tests/driver/T2057/pkgA1.conf.in - testsuite/tests/driver/T2057/src/base-v1/Base.hs → testsuite/tests/driver/T2057/pkgA1/A.hs - + testsuite/tests/driver/T2057/pkgA2.conf.in - testsuite/tests/driver/T2057/src/base-v2/Base.hs → testsuite/tests/driver/T2057/pkgA2/A.hs - + testsuite/tests/driver/T2057/pkgB.conf.in - testsuite/tests/driver/T2057/src/dep/Dep.hs → testsuite/tests/driver/T2057/pkgB/B.hs Changes: ===================================== testsuite/tests/driver/T2057/.gitignore ===================================== @@ -0,0 +1 @@ +work/ ===================================== testsuite/tests/driver/T2057/Makefile ===================================== @@ -4,9 +4,9 @@ include $(TOP)/mk/test.mk WORK = work PKGDB = $(WORK)/pkgdb -BASE_V1 = $(WORK)/basepkg-v1 -BASE_V2 = $(WORK)/basepkg-v2 -DEP = $(WORK)/dep +PKGA1 = $(WORK)/pkgA1 +PKGA2 = $(WORK)/pkgA2 +PKGB = $(WORK)/pkgB APP = $(WORK)/app OUT = $(WORK)/T2057.out @@ -15,29 +15,30 @@ OUT = $(WORK)/T2057.out clean: rm -rf $(WORK) +# Dependency graph: +# pkgB is built against pkgA1. +# We then rebuild the same installed unit id (pkgA1-1) from the pkgA2 sources, +# leaving pkgB with a stale unfolding that still references pkgA1's old API. +# Compiling Main against pkgB should therefore stop at the interface error. T2057: clean @set -eu; \ BASE_ID=`'$(GHC_PKG)' field base id --simple-output`; \ - mkdir -p '$(BASE_V1)' '$(BASE_V2)' '$(DEP)' '$(APP)'; \ + mkdir -p '$(PKGA1)' '$(PKGA2)' '$(PKGB)' '$(APP)'; \ '$(GHC_PKG)' init '$(PKGDB)'; \ - cp src/base-v1/Base.hs '$(BASE_V1)/Base.hs'; \ - cp src/base-v2/Base.hs '$(BASE_V2)/Base.hs'; \ - cp src/dep/Dep.hs '$(DEP)/Dep.hs'; \ - cp src/app/Main.hs '$(APP)/Main.hs'; \ - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id basepkg-1 -O -c '$(BASE_V1)/Base.hs' -outputdir '$(BASE_V1)'; \ - ar q '$(BASE_V1)/libHSbasepkg-1.a' '$(BASE_V1)/Base.o' >/dev/null 2>&1; \ - sed "s|@BASE_ID@|$$BASE_ID|g" basepkg-v1.conf.in >'$(WORK)/basepkg-v1.conf'; \ - '$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/basepkg-v1.conf' >/dev/null; \ - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -package basepkg -this-unit-id dep-1 -O -c '$(DEP)/Dep.hs' -outputdir '$(DEP)'; \ - ar q '$(DEP)/libHSdep-1.a' '$(DEP)/Dep.o' >/dev/null 2>&1; \ - sed "s|@BASE_ID@|$$BASE_ID|g" dep.conf.in >'$(WORK)/dep.conf'; \ - '$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/dep.conf' >/dev/null; \ - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id basepkg-1 -O -c '$(BASE_V2)/Base.hs' -outputdir '$(BASE_V2)'; \ - ar q '$(BASE_V2)/libHSbasepkg-1.a' '$(BASE_V2)/Base.o' >/dev/null 2>&1; \ - sed "s|@BASE_ID@|$$BASE_ID|g" basepkg-v2.conf.in >'$(WORK)/basepkg-v2.conf'; \ - '$(GHC_PKG)' --package-db '$(PKGDB)' update '$(WORK)/basepkg-v2.conf' >/dev/null; \ + '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id pkgA1-1 -O -c pkgA1/A.hs -outputdir '$(PKGA1)'; \ + ar q '$(PKGA1)/libHSpkgA1-1.a' '$(PKGA1)/A.o' >/dev/null 2>&1; \ + sed "s|@BASE_ID@|$$BASE_ID|g" pkgA1.conf.in >'$(WORK)/pkgA1.conf'; \ + '$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/pkgA1.conf' >/dev/null; \ + '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -package pkgA1 -this-unit-id pkgB-1 -O -c pkgB/B.hs -outputdir '$(PKGB)'; \ + ar q '$(PKGB)/libHSpkgB-1.a' '$(PKGB)/B.o' >/dev/null 2>&1; \ + sed "s|@BASE_ID@|$$BASE_ID|g" pkgB.conf.in >'$(WORK)/pkgB.conf'; \ + '$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/pkgB.conf' >/dev/null; \ + '$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id pkgA1-1 -O -c pkgA2/A.hs -outputdir '$(PKGA2)'; \ + ar q '$(PKGA2)/libHSpkgA1-1.a' '$(PKGA2)/A.o' >/dev/null 2>&1; \ + sed "s|@BASE_ID@|$$BASE_ID|g" pkgA2.conf.in >'$(WORK)/pkgA2.conf'; \ + '$(GHC_PKG)' --package-db '$(PKGDB)' update '$(WORK)/pkgA2.conf' >/dev/null; \ status=0; \ - '$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make '$(APP)/Main.hs' -O -fforce-recomp -package-db '$(PKGDB)' -package dep >'$(OUT)' 2>&1 || status=$$?; \ + '$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make app/Main.hs -O -fforce-recomp -package-db '$(PKGDB)' -package pkgB >'$(OUT)' 2>&1 || status=$$?; \ if [ $$status -eq 0 ]; then \ echo "expected compilation failure" >&2; \ exit 1; \ ===================================== testsuite/tests/driver/T2057/T2057.stderr ===================================== @@ -1,4 +1,4 @@ -work/dep/Dep.hi +work/pkgB/B.hi Declaration for saved Unfolding of saved: staleDependencyBinding ErrorWithoutFlag ===================================== testsuite/tests/driver/T2057/all.T ===================================== @@ -1,6 +1,6 @@ test( 'T2057', - [ extra_files(['src', 'basepkg-v1.conf.in', 'basepkg-v2.conf.in', 'dep.conf.in']) + [ extra_files(['pkgA1', 'pkgA2', 'pkgB', 'app', 'pkgA1.conf.in', 'pkgA2.conf.in', 'pkgB.conf.in']) , when(opsys('mingw32'), skip) , js_skip , wasm_skip ===================================== testsuite/tests/driver/T2057/src/app/Main.hs → testsuite/tests/driver/T2057/app/Main.hs ===================================== @@ -1,6 +1,6 @@ module Main where -import Dep +import B main :: IO () main = print (saved 41) ===================================== testsuite/tests/driver/T2057/basepkg-v1.conf.in deleted ===================================== @@ -1,11 +0,0 @@ -name: basepkg -version: 1.0 -id: basepkg-1 -key: basepkg-1 -exposed: True -exposed-modules: Base -import-dirs: ${pkgroot}/basepkg-v1 -library-dirs: ${pkgroot}/basepkg-v1 -dynamic-library-dirs: ${pkgroot}/basepkg-v1 -hs-libraries: HSbasepkg-1 -depends: @BASE_ID@ ===================================== testsuite/tests/driver/T2057/basepkg-v2.conf.in deleted ===================================== @@ -1,11 +0,0 @@ -name: basepkg -version: 1.0 -id: basepkg-1 -key: basepkg-1 -exposed: True -exposed-modules: Base -import-dirs: ${pkgroot}/basepkg-v2 -library-dirs: ${pkgroot}/basepkg-v2 -dynamic-library-dirs: ${pkgroot}/basepkg-v2 -hs-libraries: HSbasepkg-1 -depends: @BASE_ID@ ===================================== testsuite/tests/driver/T2057/dep.conf.in deleted ===================================== @@ -1,11 +0,0 @@ -name: dep -version: 1.0 -id: dep-1 -key: dep-1 -exposed: True -exposed-modules: Dep -import-dirs: ${pkgroot}/dep -library-dirs: ${pkgroot}/dep -dynamic-library-dirs: ${pkgroot}/dep -hs-libraries: HSdep-1 -depends: basepkg-1 @BASE_ID@ ===================================== testsuite/tests/driver/T2057/pkgA1.conf.in ===================================== @@ -0,0 +1,11 @@ +name: pkgA1 +version: 1.0 +id: pkgA1-1 +key: pkgA1-1 +exposed: True +exposed-modules: A +import-dirs: ${pkgroot}/pkgA1 +library-dirs: ${pkgroot}/pkgA1 +dynamic-library-dirs: ${pkgroot}/pkgA1 +hs-libraries: HSpkgA1-1 +depends: @BASE_ID@ ===================================== testsuite/tests/driver/T2057/src/base-v1/Base.hs → testsuite/tests/driver/T2057/pkgA1/A.hs ===================================== @@ -1,4 +1,4 @@ -module Base (staleDependencyBinding) where +module A (staleDependencyBinding) where {-# INLINE staleDependencyBinding #-} staleDependencyBinding :: Int -> Int ===================================== testsuite/tests/driver/T2057/pkgA2.conf.in ===================================== @@ -0,0 +1,11 @@ +name: pkgA1 +version: 1.0 +id: pkgA1-1 +key: pkgA1-1 +exposed: True +exposed-modules: A +import-dirs: ${pkgroot}/pkgA2 +library-dirs: ${pkgroot}/pkgA2 +dynamic-library-dirs: ${pkgroot}/pkgA2 +hs-libraries: HSpkgA1-1 +depends: @BASE_ID@ ===================================== testsuite/tests/driver/T2057/src/base-v2/Base.hs → testsuite/tests/driver/T2057/pkgA2/A.hs ===================================== @@ -1,4 +1,4 @@ -module Base (replacementBinding) where +module A (replacementBinding) where replacementBinding :: Int -> Int replacementBinding x = x + 100 ===================================== testsuite/tests/driver/T2057/pkgB.conf.in ===================================== @@ -0,0 +1,11 @@ +name: pkgB +version: 1.0 +id: pkgB-1 +key: pkgB-1 +exposed: True +exposed-modules: B +import-dirs: ${pkgroot}/pkgB +library-dirs: ${pkgroot}/pkgB +dynamic-library-dirs: ${pkgroot}/pkgB +hs-libraries: HSpkgB-1 +depends: pkgA1-1 @BASE_ID@ ===================================== testsuite/tests/driver/T2057/src/dep/Dep.hs → testsuite/tests/driver/T2057/pkgB/B.hs ===================================== @@ -1,6 +1,6 @@ -module Dep (saved) where +module B (saved) where -import Base +import A {-# INLINE saved #-} saved :: Int -> Int View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/aacab4158c96a461eff6dd80010224d... -- View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/aacab4158c96a461eff6dd80010224d... You're receiving this email because of your account on gitlab.haskell.org.
participants (1)
-
Simon Jakobi (@sjakobi2)