summaryrefslogtreecommitdiff
path: root/testsuite/tests/driver/retc001
diff options
context:
space:
mode:
authorEdward Z. Yang <ezyang@cs.stanford.edu>2014-12-27 10:50:01 -0800
committerEdward Z. Yang <ezyang@cs.stanford.edu>2015-01-03 11:56:14 -0800
commit2223e196b2dc5340d70e58be011c279d381b4319 (patch)
tree3c587547990df7c62d73598f9dfe991afb0b4880 /testsuite/tests/driver/retc001
parentaf4d99803ea7676f88f250ad56a8c31c1c8cd5bc (diff)
downloadhaskell-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.hs4
-rw-r--r--testsuite/tests/driver/retc001/B1.hs3
-rw-r--r--testsuite/tests/driver/retc001/B2.hs3
-rw-r--r--testsuite/tests/driver/retc001/C.hs6
-rw-r--r--testsuite/tests/driver/retc001/Makefile24
-rw-r--r--testsuite/tests/driver/retc001/all.T5
-rw-r--r--testsuite/tests/driver/retc001/retc001.stderr2
-rw-r--r--testsuite/tests/driver/retc001/retc001.stdout7
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]