Simon Jakobi pushed to branch wip/sjakobi/T2057 at Glasgow Haskell Compiler / GHC

Commits:

14 changed files:

Changes:

  • testsuite/tests/driver/T2057/.gitignore
    1
    +work/

  • testsuite/tests/driver/T2057/Makefile
    ... ... @@ -4,9 +4,9 @@ include $(TOP)/mk/test.mk
    4 4
     
    
    5 5
     WORK = work
    
    6 6
     PKGDB = $(WORK)/pkgdb
    
    7
    -BASE_V1 = $(WORK)/basepkg-v1
    
    8
    -BASE_V2 = $(WORK)/basepkg-v2
    
    9
    -DEP = $(WORK)/dep
    
    7
    +PKGA1 = $(WORK)/pkgA1
    
    8
    +PKGA2 = $(WORK)/pkgA2
    
    9
    +PKGB = $(WORK)/pkgB
    
    10 10
     APP = $(WORK)/app
    
    11 11
     OUT = $(WORK)/T2057.out
    
    12 12
     
    
    ... ... @@ -15,29 +15,30 @@ OUT = $(WORK)/T2057.out
    15 15
     clean:
    
    16 16
     	rm -rf $(WORK)
    
    17 17
     
    
    18
    +# Dependency graph:
    
    19
    +#   pkgB is built against pkgA1.
    
    20
    +#   We then rebuild the same installed unit id (pkgA1-1) from the pkgA2 sources,
    
    21
    +#   leaving pkgB with a stale unfolding that still references pkgA1's old API.
    
    22
    +#   Compiling Main against pkgB should therefore stop at the interface error.
    
    18 23
     T2057: clean
    
    19 24
     	@set -eu; \
    
    20 25
     	BASE_ID=`'$(GHC_PKG)' field base id --simple-output`; \
    
    21
    -	mkdir -p '$(BASE_V1)' '$(BASE_V2)' '$(DEP)' '$(APP)'; \
    
    26
    +	mkdir -p '$(PKGA1)' '$(PKGA2)' '$(PKGB)' '$(APP)'; \
    
    22 27
     	'$(GHC_PKG)' init '$(PKGDB)'; \
    
    23
    -	cp src/base-v1/Base.hs '$(BASE_V1)/Base.hs'; \
    
    24
    -	cp src/base-v2/Base.hs '$(BASE_V2)/Base.hs'; \
    
    25
    -	cp src/dep/Dep.hs '$(DEP)/Dep.hs'; \
    
    26
    -	cp src/app/Main.hs '$(APP)/Main.hs'; \
    
    27
    -	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id basepkg-1 -O -c '$(BASE_V1)/Base.hs' -outputdir '$(BASE_V1)'; \
    
    28
    -	ar q '$(BASE_V1)/libHSbasepkg-1.a' '$(BASE_V1)/Base.o' >/dev/null 2>&1; \
    
    29
    -	sed "s|@BASE_ID@|$$BASE_ID|g" basepkg-v1.conf.in >'$(WORK)/basepkg-v1.conf'; \
    
    30
    -	'$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/basepkg-v1.conf' >/dev/null; \
    
    31
    -	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -package basepkg -this-unit-id dep-1 -O -c '$(DEP)/Dep.hs' -outputdir '$(DEP)'; \
    
    32
    -	ar q '$(DEP)/libHSdep-1.a' '$(DEP)/Dep.o' >/dev/null 2>&1; \
    
    33
    -	sed "s|@BASE_ID@|$$BASE_ID|g" dep.conf.in >'$(WORK)/dep.conf'; \
    
    34
    -	'$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/dep.conf' >/dev/null; \
    
    35
    -	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id basepkg-1 -O -c '$(BASE_V2)/Base.hs' -outputdir '$(BASE_V2)'; \
    
    36
    -	ar q '$(BASE_V2)/libHSbasepkg-1.a' '$(BASE_V2)/Base.o' >/dev/null 2>&1; \
    
    37
    -	sed "s|@BASE_ID@|$$BASE_ID|g" basepkg-v2.conf.in >'$(WORK)/basepkg-v2.conf'; \
    
    38
    -	'$(GHC_PKG)' --package-db '$(PKGDB)' update '$(WORK)/basepkg-v2.conf' >/dev/null; \
    
    28
    +	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id pkgA1-1 -O -c pkgA1/A.hs -outputdir '$(PKGA1)'; \
    
    29
    +	ar q '$(PKGA1)/libHSpkgA1-1.a' '$(PKGA1)/A.o' >/dev/null 2>&1; \
    
    30
    +	sed "s|@BASE_ID@|$$BASE_ID|g" pkgA1.conf.in >'$(WORK)/pkgA1.conf'; \
    
    31
    +	'$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/pkgA1.conf' >/dev/null; \
    
    32
    +	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -package pkgA1 -this-unit-id pkgB-1 -O -c pkgB/B.hs -outputdir '$(PKGB)'; \
    
    33
    +	ar q '$(PKGB)/libHSpkgB-1.a' '$(PKGB)/B.o' >/dev/null 2>&1; \
    
    34
    +	sed "s|@BASE_ID@|$$BASE_ID|g" pkgB.conf.in >'$(WORK)/pkgB.conf'; \
    
    35
    +	'$(GHC_PKG)' --package-db '$(PKGDB)' register '$(WORK)/pkgB.conf' >/dev/null; \
    
    36
    +	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 -package-db '$(PKGDB)' -this-unit-id pkgA1-1 -O -c pkgA2/A.hs -outputdir '$(PKGA2)'; \
    
    37
    +	ar q '$(PKGA2)/libHSpkgA1-1.a' '$(PKGA2)/A.o' >/dev/null 2>&1; \
    
    38
    +	sed "s|@BASE_ID@|$$BASE_ID|g" pkgA2.conf.in >'$(WORK)/pkgA2.conf'; \
    
    39
    +	'$(GHC_PKG)' --package-db '$(PKGDB)' update '$(WORK)/pkgA2.conf' >/dev/null; \
    
    39 40
     	status=0; \
    
    40
    -	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make '$(APP)/Main.hs' -O -fforce-recomp -package-db '$(PKGDB)' -package dep >'$(OUT)' 2>&1 || status=$$?; \
    
    41
    +	'$(TEST_HC)' $(TEST_HC_OPTS) -v0 --make app/Main.hs -O -fforce-recomp -package-db '$(PKGDB)' -package pkgB >'$(OUT)' 2>&1 || status=$$?; \
    
    41 42
     	if [ $$status -eq 0 ]; then \
    
    42 43
     	  echo "expected compilation failure" >&2; \
    
    43 44
     	  exit 1; \
    

  • testsuite/tests/driver/T2057/T2057.stderr
    1
    -work/dep/Dep.hi
    
    1
    +work/pkgB/B.hi
    
    2 2
     Declaration for saved
    
    3 3
     Unfolding of saved:
    
    4 4
       staleDependencyBinding ErrorWithoutFlag
    

  • testsuite/tests/driver/T2057/all.T
    1 1
     test(
    
    2 2
       'T2057',
    
    3
    -  [ extra_files(['src', 'basepkg-v1.conf.in', 'basepkg-v2.conf.in', 'dep.conf.in'])
    
    3
    +  [ extra_files(['pkgA1', 'pkgA2', 'pkgB', 'app', 'pkgA1.conf.in', 'pkgA2.conf.in', 'pkgB.conf.in'])
    
    4 4
       , when(opsys('mingw32'), skip)
    
    5 5
       , js_skip
    
    6 6
       , wasm_skip
    

  • testsuite/tests/driver/T2057/src/app/Main.hstestsuite/tests/driver/T2057/app/Main.hs
    1 1
     module Main where
    
    2 2
     
    
    3
    -import Dep
    
    3
    +import B
    
    4 4
     
    
    5 5
     main :: IO ()
    
    6 6
     main = print (saved 41)

  • testsuite/tests/driver/T2057/basepkg-v1.conf.in deleted
    1
    -name: basepkg
    
    2
    -version: 1.0
    
    3
    -id: basepkg-1
    
    4
    -key: basepkg-1
    
    5
    -exposed: True
    
    6
    -exposed-modules: Base
    
    7
    -import-dirs: ${pkgroot}/basepkg-v1
    
    8
    -library-dirs: ${pkgroot}/basepkg-v1
    
    9
    -dynamic-library-dirs: ${pkgroot}/basepkg-v1
    
    10
    -hs-libraries: HSbasepkg-1
    
    11
    -depends: @BASE_ID@

  • testsuite/tests/driver/T2057/basepkg-v2.conf.in deleted
    1
    -name: basepkg
    
    2
    -version: 1.0
    
    3
    -id: basepkg-1
    
    4
    -key: basepkg-1
    
    5
    -exposed: True
    
    6
    -exposed-modules: Base
    
    7
    -import-dirs: ${pkgroot}/basepkg-v2
    
    8
    -library-dirs: ${pkgroot}/basepkg-v2
    
    9
    -dynamic-library-dirs: ${pkgroot}/basepkg-v2
    
    10
    -hs-libraries: HSbasepkg-1
    
    11
    -depends: @BASE_ID@

  • testsuite/tests/driver/T2057/dep.conf.in deleted
    1
    -name: dep
    
    2
    -version: 1.0
    
    3
    -id: dep-1
    
    4
    -key: dep-1
    
    5
    -exposed: True
    
    6
    -exposed-modules: Dep
    
    7
    -import-dirs: ${pkgroot}/dep
    
    8
    -library-dirs: ${pkgroot}/dep
    
    9
    -dynamic-library-dirs: ${pkgroot}/dep
    
    10
    -hs-libraries: HSdep-1
    
    11
    -depends: basepkg-1 @BASE_ID@

  • testsuite/tests/driver/T2057/pkgA1.conf.in
    1
    +name: pkgA1
    
    2
    +version: 1.0
    
    3
    +id: pkgA1-1
    
    4
    +key: pkgA1-1
    
    5
    +exposed: True
    
    6
    +exposed-modules: A
    
    7
    +import-dirs: ${pkgroot}/pkgA1
    
    8
    +library-dirs: ${pkgroot}/pkgA1
    
    9
    +dynamic-library-dirs: ${pkgroot}/pkgA1
    
    10
    +hs-libraries: HSpkgA1-1
    
    11
    +depends: @BASE_ID@

  • testsuite/tests/driver/T2057/src/base-v1/Base.hstestsuite/tests/driver/T2057/pkgA1/A.hs
    1
    -module Base (staleDependencyBinding) where
    
    1
    +module A (staleDependencyBinding) where
    
    2 2
     
    
    3 3
     {-# INLINE staleDependencyBinding #-}
    
    4 4
     staleDependencyBinding :: Int -> Int
    

  • testsuite/tests/driver/T2057/pkgA2.conf.in
    1
    +name: pkgA1
    
    2
    +version: 1.0
    
    3
    +id: pkgA1-1
    
    4
    +key: pkgA1-1
    
    5
    +exposed: True
    
    6
    +exposed-modules: A
    
    7
    +import-dirs: ${pkgroot}/pkgA2
    
    8
    +library-dirs: ${pkgroot}/pkgA2
    
    9
    +dynamic-library-dirs: ${pkgroot}/pkgA2
    
    10
    +hs-libraries: HSpkgA1-1
    
    11
    +depends: @BASE_ID@

  • testsuite/tests/driver/T2057/src/base-v2/Base.hstestsuite/tests/driver/T2057/pkgA2/A.hs
    1
    -module Base (replacementBinding) where
    
    1
    +module A (replacementBinding) where
    
    2 2
     
    
    3 3
     replacementBinding :: Int -> Int
    
    4 4
     replacementBinding x = x + 100

  • testsuite/tests/driver/T2057/pkgB.conf.in
    1
    +name: pkgB
    
    2
    +version: 1.0
    
    3
    +id: pkgB-1
    
    4
    +key: pkgB-1
    
    5
    +exposed: True
    
    6
    +exposed-modules: B
    
    7
    +import-dirs: ${pkgroot}/pkgB
    
    8
    +library-dirs: ${pkgroot}/pkgB
    
    9
    +dynamic-library-dirs: ${pkgroot}/pkgB
    
    10
    +hs-libraries: HSpkgB-1
    
    11
    +depends: pkgA1-1 @BASE_ID@

  • testsuite/tests/driver/T2057/src/dep/Dep.hstestsuite/tests/driver/T2057/pkgB/B.hs
    1
    -module Dep (saved) where
    
    1
    +module B (saved) where
    
    2 2
     
    
    3
    -import Base
    
    3
    +import A
    
    4 4
     
    
    5 5
     {-# INLINE saved #-}
    
    6 6
     saved :: Int -> Int