diff options
author | Edward Z. Yang <ezyang@cs.stanford.edu> | 2014-12-27 10:50:01 -0800 |
---|---|---|
committer | Edward Z. Yang <ezyang@cs.stanford.edu> | 2015-01-03 11:56:14 -0800 |
commit | 2223e196b2dc5340d70e58be011c279d381b4319 (patch) | |
tree | 3c587547990df7c62d73598f9dfe991afb0b4880 /testsuite/tests/driver/retc001 | |
parent | af4d99803ea7676f88f250ad56a8c31c1c8cd5bc (diff) | |
download | haskell-2223e196b2dc5340d70e58be011c279d381b4319.tar.gz |
Fix #9243 so recompilation avoidance works with -fno-code
Summary:
Where we track timestamps of object files, also track timestamps
for interface files. When -fno-code -fwrite-interface is enabled, use
the interface file timestamp as an extra check to see if the files are
up-to-date. We had to apply this logic to one-shot and make modes.
This fix would be good to merge into 7.10; it makes using -fno-code
-fwrite-interface for flywheel type checking usable.
Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate and new test cases
Reviewers: austin
Subscribers: carter, thomie
Differential Revision: https://phabricator.haskell.org/D596
GHC Trac Issues: #9243
Diffstat (limited to 'testsuite/tests/driver/retc001')
-rw-r--r-- | testsuite/tests/driver/retc001/A.hs | 4 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/B1.hs | 3 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/B2.hs | 3 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/C.hs | 6 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/Makefile | 24 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/all.T | 5 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/retc001.stderr | 2 | ||||
-rw-r--r-- | testsuite/tests/driver/retc001/retc001.stdout | 7 |
8 files changed, 54 insertions, 0 deletions
diff --git a/testsuite/tests/driver/retc001/A.hs b/testsuite/tests/driver/retc001/A.hs new file mode 100644 index 0000000000..d7fc96e70e --- /dev/null +++ b/testsuite/tests/driver/retc001/A.hs @@ -0,0 +1,4 @@ +module A where + +foo :: Int +foo = 4 diff --git a/testsuite/tests/driver/retc001/B1.hs b/testsuite/tests/driver/retc001/B1.hs new file mode 100644 index 0000000000..d0efd79bf0 --- /dev/null +++ b/testsuite/tests/driver/retc001/B1.hs @@ -0,0 +1,3 @@ +module B (foo) where + +import A (foo) diff --git a/testsuite/tests/driver/retc001/B2.hs b/testsuite/tests/driver/retc001/B2.hs new file mode 100644 index 0000000000..213d77d5eb --- /dev/null +++ b/testsuite/tests/driver/retc001/B2.hs @@ -0,0 +1,3 @@ +module B () where + +import A () diff --git a/testsuite/tests/driver/retc001/C.hs b/testsuite/tests/driver/retc001/C.hs new file mode 100644 index 0000000000..d38b2ff51c --- /dev/null +++ b/testsuite/tests/driver/retc001/C.hs @@ -0,0 +1,6 @@ +module Main (main) where + +import B (foo) + +main :: IO () +main = print foo diff --git a/testsuite/tests/driver/retc001/Makefile b/testsuite/tests/driver/retc001/Makefile new file mode 100644 index 0000000000..a3cf6ebf3d --- /dev/null +++ b/testsuite/tests/driver/retc001/Makefile @@ -0,0 +1,24 @@ +TOP=../../.. +include $(TOP)/mk/boilerplate.mk +include $(TOP)/mk/test.mk + +# -fforce-recomp makes lots of driver tests trivially pass, so we +# filter it out from $(TEST_HC_OPTS). +TEST_HC_OPTS_NO_RECOMP = $(filter-out -fforce-recomp,$(TEST_HC_OPTS)) + +# Recompilation tests + +clean: + rm -f *.o *.hi + rm -f B.hs C + +# 001: removing an export should force a retypecheck of dependent modules. + +retc001: clean + cp B1.hs B.hs + '$(TEST_HC)' $(TEST_HC_OPTS_NO_RECOMP) -fno-code -fwrite-interface --make C.hs + echo 'Middle' + '$(TEST_HC)' $(TEST_HC_OPTS_NO_RECOMP) -fno-code -fwrite-interface --make C.hs + echo 'End' + cp B2.hs B.hs + -'$(TEST_HC)' $(TEST_HC_OPTS_NO_RECOMP) -fno-code -fwrite-interface --make C.hs diff --git a/testsuite/tests/driver/retc001/all.T b/testsuite/tests/driver/retc001/all.T new file mode 100644 index 0000000000..7e5fda589c --- /dev/null +++ b/testsuite/tests/driver/retc001/all.T @@ -0,0 +1,5 @@ +test('retc001', + [clean_cmd('$MAKE -s clean')], + run_command, + ['$MAKE -s --no-print-directory retc001']) + diff --git a/testsuite/tests/driver/retc001/retc001.stderr b/testsuite/tests/driver/retc001/retc001.stderr new file mode 100644 index 0000000000..724326e081 --- /dev/null +++ b/testsuite/tests/driver/retc001/retc001.stderr @@ -0,0 +1,2 @@ + +C.hs:3:11: Module ‘B’ does not export ‘foo’ diff --git a/testsuite/tests/driver/retc001/retc001.stdout b/testsuite/tests/driver/retc001/retc001.stdout new file mode 100644 index 0000000000..381850d9a4 --- /dev/null +++ b/testsuite/tests/driver/retc001/retc001.stdout @@ -0,0 +1,7 @@ +[1 of 3] Compiling A ( A.hs, nothing ) +[2 of 3] Compiling B ( B.hs, nothing ) +[3 of 3] Compiling Main ( C.hs, nothing ) +Middle +End +[2 of 3] Compiling B ( B.hs, nothing ) +[3 of 3] Compiling Main ( C.hs, nothing ) [B changed] |