diff options
author | David Terei <davidterei@gmail.com> | 2011-11-08 20:28:12 -0800 |
---|---|---|
committer | David Terei <davidterei@gmail.com> | 2011-11-09 15:46:30 -0800 |
commit | 798f3ec2daeed52cb98725b02693953915905ae4 (patch) | |
tree | 8f2852fd3f0ae4e3dcd0f7e871bbd2b24b630d49 /testsuite/tests/safeHaskell/safeLanguage | |
parent | 3eaeb7afdc64acb0d920253291f3a14534a3b018 (diff) | |
download | haskell-798f3ec2daeed52cb98725b02693953915905ae4.tar.gz |
Update Safe Haskell test to include recomp checks
Diffstat (limited to 'testsuite/tests/safeHaskell/safeLanguage')
9 files changed, 105 insertions, 0 deletions
diff --git a/testsuite/tests/safeHaskell/safeLanguage/Makefile b/testsuite/tests/safeHaskell/safeLanguage/Makefile index 9101fbd40a..b4d92f21fa 100644 --- a/testsuite/tests/safeHaskell/safeLanguage/Makefile +++ b/testsuite/tests/safeHaskell/safeLanguage/Makefile @@ -1,3 +1,82 @@ TOP=../../.. include $(TOP)/mk/boilerplate.mk include $(TOP)/mk/test.mk + +# Here we test that recompilation detection works correctly. +# (e.g # if the safe haskell flags change, recompilation should take place) + +cleanSafeRecomp01: + rm -rf SafeRecomp01.o SafeRecomp01.hi + +# Just a single file +safeRecomp01: + '$(MAKE)' cleanSafeRecomp01 + + '$(TEST_HC)' -c SafeRecomp01.hs + '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:' + + '$(TEST_HC)' -XSafe -c SafeRecomp01.hs + '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:' + + '$(TEST_HC)' -XTrustworthy -c SafeRecomp01.hs + '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:' + + '$(TEST_HC)' -XUnsafe -c SafeRecomp01.hs + '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:' + + '$(TEST_HC)' -XUnsafe -c SafeRecomp01.hs + '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:' + + # what should happen when no safe haskell flag specified? + # at moment we revert to 'no flags' so we recompile if previously + # flags were specified. An alternate design would be to assume the + # safe haskell flags from the old compile still apply but we + # go with the previous design as that's the least suprise to a user. + # See [SafeRecomp02] though. + '$(TEST_HC)' -c SafeRecomp01.hs + '$(TEST_HC)' --show-iface SafeRecomp01.hi | grep -E '^trusted:' + +cleanSafeRecomp02: + rm -rf SafeRecomp02 SafeRecomp02.o SafeRecomp02.hi SafeRecomp02_A.o SafeRecomp02_A.hi + +# mutli module program +safeRecomp02: + '$(MAKE)' cleanSafeRecomp02 + + '$(TEST_HC)' -c SafeRecomp02_A.hs + '$(TEST_HC)' --make SafeRecomp02.hs + '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:' + '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:' + + # Here we compile A with -XSafe but as we call --make with no flags, + # A is recompiled in 'no flag' mode. Seems a little wrong. Maybe + # we want that if a user is directly compiling a module we don't + # use any old safe haskell flags, but if we are deciding to recompile + # a module or not that was sucked up by --make, we consider no flags + # to be equivalent to old flags? + '$(TEST_HC)' -c -XSafe SafeRecomp02_A.hs + '$(TEST_HC)' --make SafeRecomp02.hs + '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:' + '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:' + + # Assuming above design, we want A to be recompiled here I think as + # -XSafe was explicitly specified as part of --make. + '$(TEST_HC)' -c -XTrustworthy SafeRecomp02_A.hs + '$(TEST_HC)' --make -XSafe SafeRecomp02.hs + '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:' + '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:' + + # Compiling manually so no recompilation checking + '$(TEST_HC)' -c -XTrustworthy SafeRecomp02_A.hs + '$(TEST_HC)' -c -XSafe SafeRecomp02.hs + '$(TEST_HC)' -o SafeRecomp02 SafeRecomp02.o SafeRecomp02_A.o + '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:' + '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:' + + # manual compile followed by --make + '$(TEST_HC)' -c -XTrustworthy SafeRecomp02_A.hs + '$(TEST_HC)' -c -XSafe SafeRecomp02.hs + '$(TEST_HC)' --make -o SafeRecomp02 SafeRecomp02.o SafeRecomp02_A.o + '$(TEST_HC)' --show-iface SafeRecomp02_A.hi | grep -E '^trusted:' + '$(TEST_HC)' --show-iface SafeRecomp02.hi | grep -E '^trusted:' + diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs new file mode 100644 index 0000000000..5dce14b6e6 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.hs @@ -0,0 +1,5 @@ +module SafeRecomp01 where + +f :: Int +f = 1 + diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stderr diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp01.stdout diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs new file mode 100644 index 0000000000..e63fd2f606 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.hs @@ -0,0 +1,10 @@ +module Main where + +import SafeRecomp02_A + +f :: Int +f = 1 + +main :: IO () +main = putStrLn $ show $ f + g + diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stderr diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02.stdout diff --git a/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs new file mode 100644 index 0000000000..bb0f62a5cb --- /dev/null +++ b/testsuite/tests/safeHaskell/safeLanguage/SafeRecomp02_A.hs @@ -0,0 +1,5 @@ +module SafeRecomp02_A where + +g :: Int +g = 1 + diff --git a/testsuite/tests/safeHaskell/safeLanguage/all.T b/testsuite/tests/safeHaskell/safeLanguage/all.T index 75ebad8e90..506b45d432 100644 --- a/testsuite/tests/safeHaskell/safeLanguage/all.T +++ b/testsuite/tests/safeHaskell/safeLanguage/all.T @@ -53,3 +53,9 @@ test('SafeLang15', ['SafeLang15', '-XSafe']) test('SafeLang16', normal, compile, ['']) +# Test building a package, that trust values are set correctly +# and can be changed correctly +#test('SafeRecomp01', +# clean_cmd('$MAKE -s --no-print-directory cleanSafeRecomp01'), +# run_command, ['$MAKE -s --no-print-directory safeRecomp01']) + |