Testsuite: run tests in <testdir>.run instead of /tmp
authorThomas Miedema <thomasmiedema@gmail.com>
Wed, 15 Jun 2016 14:57:05 +0000 (16:57 +0200)
committerThomas Miedema <thomasmiedema@gmail.com>
Sat, 18 Jun 2016 10:46:05 +0000 (12:46 +0200)
As discussed in Phab:D1187, this approach makes it a bit easier to
inspect the test directory while working on a new test.

The only tests that needed changes are the ones that refer to files in
ancestor directories. Those files are now copied directly into the test
directory.

validate still runs the tests in a temporary directory in /tmp, see
`Note [Running tests in /tmp]` in testsuite/driver/runtests.py.

Update submodule hpc.

Reviewed by: simonmar

Differential Revision: https://phabricator.haskell.org/D2333

GHC Trac Issues: #11980

81 files changed:
.gitignore
libraries/hpc
testsuite/config/ghc
testsuite/driver/runtests.py
testsuite/driver/testglobals.py
testsuite/driver/testlib.py
testsuite/mk/test.mk
testsuite/tests/ghci.debugger/scripts/all.T
testsuite/tests/ghci.debugger/scripts/break001.script
testsuite/tests/ghci.debugger/scripts/break001.stdout
testsuite/tests/ghci.debugger/scripts/break002.script
testsuite/tests/ghci.debugger/scripts/break003.script
testsuite/tests/ghci.debugger/scripts/break003.stdout
testsuite/tests/ghci.debugger/scripts/break004.script
testsuite/tests/ghci.debugger/scripts/break005.script
testsuite/tests/ghci.debugger/scripts/break005.stdout
testsuite/tests/ghci.debugger/scripts/break006.script
testsuite/tests/ghci.debugger/scripts/break006.stdout
testsuite/tests/ghci.debugger/scripts/break008.script
testsuite/tests/ghci.debugger/scripts/break008.stdout
testsuite/tests/ghci.debugger/scripts/break009.script
testsuite/tests/ghci.debugger/scripts/break009.stdout
testsuite/tests/ghci.debugger/scripts/break010.script
testsuite/tests/ghci.debugger/scripts/break010.stdout
testsuite/tests/ghci.debugger/scripts/break011.script
testsuite/tests/ghci.debugger/scripts/break011.stdout
testsuite/tests/ghci.debugger/scripts/break017.script
testsuite/tests/ghci.debugger/scripts/break017.stdout
testsuite/tests/ghci.debugger/scripts/break018.script
testsuite/tests/ghci.debugger/scripts/break018.stdout
testsuite/tests/ghci.debugger/scripts/break019.script
testsuite/tests/ghci.debugger/scripts/break027.script
testsuite/tests/ghci.debugger/scripts/break027.stdout
testsuite/tests/ghci.debugger/scripts/dynbrk001.script
testsuite/tests/ghci.debugger/scripts/dynbrk002.script
testsuite/tests/ghci.debugger/scripts/dynbrk002.stdout
testsuite/tests/ghci.debugger/scripts/dynbrk004.script
testsuite/tests/ghci.debugger/scripts/dynbrk004.stdout
testsuite/tests/ghci.debugger/scripts/getargs.script
testsuite/tests/ghci.debugger/scripts/getargs.stdout
testsuite/tests/ghci.debugger/scripts/hist001.script
testsuite/tests/ghci.debugger/scripts/hist001.stdout
testsuite/tests/ghci.debugger/scripts/listCommand001.script
testsuite/tests/ghci.debugger/scripts/print002.script
testsuite/tests/ghci.debugger/scripts/print003.script
testsuite/tests/ghci.debugger/scripts/print005.script
testsuite/tests/ghci.debugger/scripts/print005.stdout
testsuite/tests/ghci.debugger/scripts/print006.script
testsuite/tests/ghci.debugger/scripts/print007.script
testsuite/tests/ghci.debugger/scripts/print008.script
testsuite/tests/ghci.debugger/scripts/print010.script
testsuite/tests/ghci.debugger/scripts/print011.script
testsuite/tests/ghci.debugger/scripts/print012.script
testsuite/tests/ghci.debugger/scripts/print013.script
testsuite/tests/ghci.debugger/scripts/print014.script
testsuite/tests/ghci.debugger/scripts/print016.script
testsuite/tests/ghci.debugger/scripts/print017.script
testsuite/tests/ghci.debugger/scripts/print018.script
testsuite/tests/ghci.debugger/scripts/print018.stdout
testsuite/tests/ghci.debugger/scripts/print019.script
testsuite/tests/ghci.debugger/scripts/print020.script
testsuite/tests/ghci.debugger/scripts/print020.stdout
testsuite/tests/ghci.debugger/scripts/print023.script
testsuite/tests/ghci.debugger/scripts/print024.script
testsuite/tests/ghci.debugger/scripts/print034.script
testsuite/tests/ghci.debugger/scripts/print035.script
testsuite/tests/ghci/prog001/prog001.script
testsuite/tests/ghci/prog002/prog002.script
testsuite/tests/ghci/prog003/prog003.script
testsuite/tests/ghci/prog010/ghci.prog010.script
testsuite/tests/ghci/prog012/prog012.script
testsuite/tests/ghci/scripts/Defer02.script
testsuite/tests/ghci/scripts/Defer02.stderr
testsuite/tests/ghci/scripts/T6106.script
testsuite/tests/ghci/scripts/ghci026.script
testsuite/tests/ghci/scripts/ghci038.script
testsuite/tests/ghci/scripts/ghci058.script
testsuite/tests/perf/haddock/all.T
testsuite/tests/perf/should_run/all.T
testsuite/tests/rts/all.T
validate

index 1ca350b..937d58f 100644 (file)
@@ -181,3 +181,6 @@ GIT_COMMIT_ID
 .ghc
 .bash_history
 .gitconfig
+
+# Should be equal to testdir_suffix from testsuite/driver/testlib.py.
+*.run
index d8b5381..b52ab0c 160000 (submodule)
@@ -1 +1 @@
-Subproject commit d8b5381bd5d03a3a75f4a1b91f1ede6fe0fd0ce9
+Subproject commit b52ab0cc013beb1440607a7e4521a45fd6e96ce8
index 678cc56..3be803d 100644 (file)
@@ -81,7 +81,6 @@ if (ghc_with_llvm == 1):
     config.run_ways.append('optllvm')
 
 config.in_tree_compiler = in_tree_compiler
-config.cleanup          = cleanup
 
 config.way_flags = lambda name : {
     'normal'       : [],
index 39689c6..33b432f 100644 (file)
@@ -276,10 +276,24 @@ else:
     # set stdout to unbuffered (is this the best way to do it?)
     sys.stdout = os.fdopen(sys.__stdout__.fileno(), "w", 0)
 
-tempdir = tempfile.mkdtemp('', 'ghctest-')
+if config.local:
+    tempdir = ''
+else:
+    # See note [Running tests in /tmp]
+    tempdir = tempfile.mkdtemp('', 'ghctest-')
+
+    # opts.testdir should be quoted when used, to make sure the testsuite
+    # keeps working when it contains backward slashes, for example from
+    # using os.path.join. Windows native and mingw* python
+    # (/mingw64/bin/python) set `os.path.sep = '\\'`, while msys2 python
+    # (/bin/python, /usr/bin/python or /usr/local/bin/python) sets
+    # `os.path.sep = '/'`.
+    # To catch usage of unquoted opts.testdir early, insert some spaces into
+    # tempdir.
+    tempdir = os.path.join(tempdir, 'test   spaces')
 
 def cleanup_and_exit(exitcode):
-    if config.cleanup:
+    if config.cleanup and tempdir:
         shutil.rmtree(tempdir, ignore_errors=True)
     exit(exitcode)
 
@@ -334,3 +348,35 @@ else:
         summary(t, open(config.summary_file, 'w'))
 
 cleanup_and_exit(0)
+
+# Note [Running tests in /tmp]
+#
+# Use LOCAL=0 to run tests in /tmp, to catch tests that use files from
+# the source directory without copying them to the test directory first.
+#
+# As an example, take a run_command test with a Makefile containing
+# `$(TEST_HC) ../Foo.hs`. GHC will now create the output files Foo.o and
+# Foo.hi in the source directory. There are 2 problems with this:
+# * Output files in the source directory won't get cleaned up automatically.
+# * Two tests might (over)write the same output file.
+#
+# Tests that only fail when run concurrently with other tests are the
+# worst, so we try to catch them early by enabling LOCAL=0 in validate.
+#
+# Adding -outputdir='.' to TEST_HC_OPTS would help a bit, but it requires
+# making changes to quite a few tests. The problem is that
+# `$(TEST_HC) ../Foo.hs -outputdir=.` with Foo.hs containing
+# `module Main where` does not produce Foo.o, as it would without
+# -outputdir, but Main.o. See [1].
+#
+# Using -outputdir='.' is not foolproof anyway, since it does not change
+# the destination of the final executable (Foo.exe).
+#
+# Another hardening method that could be tried is to `chmod -w` the
+# source directory.
+#
+# By default we set LOCAL=1, because it makes it easier to inspect the
+# test directory while working on a new test.
+#
+# [1]
+# https://downloads.haskell.org/~ghc/8.0.1/docs/html/users_guide/separate_compilation.html#output-files
index 17aa6d3..d08141f 100644 (file)
@@ -274,6 +274,12 @@ class TestOptions:
        self.compile_timeout_multiplier = 1.0
        self.run_timeout_multiplier = 1.0
 
+       self.cleanup = True
+
+       # Sould we run tests in a local subdirectory (<testname>-run) or
+       # in temporary directory in /tmp? See Note [Running tests in /tmp].
+       self.local = True
+
 # The default set of options
 global default_testopts
 default_testopts = TestOptions()
index f6db828..32b6951 100644 (file)
@@ -546,25 +546,6 @@ def executeSetups(fs, name, opts):
 # The current directory of tests
 
 def newTestDir(tempdir, dir):
-    # opts.testdir should be quoted when used, to make sure the testsuite
-    # keeps working when it contains backward slashes, for example from
-    # using os.path.join. Windows native and mingw* python
-    # (/mingw64/bin/python) set `os.path.sep = '\\'`, while msys2 python
-    # (/bin/python, /usr/bin/python or /usr/local/bin/python) sets
-    # `os.path.sep = '/'`.
-    # To catch usage of unquoted opts.testdir early, insert some spaces into
-    # tempdir.
-    tempdir = os.path.join(tempdir, 'test   spaces')
-
-    # Hack. A few tests depend on files in ancestor directories
-    # (e.g. extra_files(['../../../../libraries/base/dist-install/haddock.t']))
-    # Make sure tempdir is sufficiently "deep", such that copying/linking those
-    # files won't cause any problems.
-    #
-    # If you received a framework failure about adding an extra level:
-    #  * add one extra '../' to the startswith('../../../../../') in do_test
-    #  * add one more number here:
-    tempdir = os.path.join(tempdir, '1', '2', '3')
 
     global thisdir_settings
     # reset the options for this test directory
@@ -572,10 +553,12 @@ def newTestDir(tempdir, dir):
         return _newTestDir(name, opts, tempdir, dir)
     thisdir_settings = settings
 
+# Should be equal to entry in toplevel .gitignore.
+testdir_suffix = '.run'
 
 def _newTestDir(name, opts, tempdir, dir):
     opts.srcdir = os.path.join(os.getcwd(), dir)
-    opts.testdir = os.path.join(tempdir, dir, name)
+    opts.testdir = os.path.join(tempdir, dir, name + testdir_suffix)
     opts.compiler_always_flags = config.compiler_always_flags
 
 # -----------------------------------------------------------------------------
@@ -718,13 +701,10 @@ def test_common_work (name, opts, func, args):
         # this seems to be necessary for only about 10% of all
         # tests).
         files = set((f for f in os.listdir(opts.srcdir)
-                        if f.startswith(name)))
+                        if f.startswith(name) and
+                           not f.endswith(testdir_suffix)))
         for filename in (opts.extra_files + extra_src_files.get(name, [])):
-            if filename.startswith('../../../../../../'):
-                framework_fail(name, 'whole-test',
-                    'add extra level to testlib.py:newTestDir for: ' + filename)
-
-            elif filename.startswith('/'):
+            if filename.startswith('/'):
                 framework_fail(name, 'whole-test',
                     'no absolute paths in extra_files please: ' + filename)
 
@@ -790,8 +770,18 @@ def do_test(name, way, func, args, files):
         # would otherwise (accidentally) write to the same output file.
         # It also makes it easier to keep the testsuite clean.
 
-        for filename in files:
-            src = in_srcdir(filename)
+        for extra_file in files:
+            src = in_srcdir(extra_file)
+            if extra_file.startswith('..'):
+                # In case the extra_file is a file in an ancestor
+                # directory (e.g. extra_files(['../shell.hs'])), make
+                # sure it is copied to the test directory
+                # (testdir/shell.hs), instead of ending up somewhere
+                # else in the tree (testdir/../shell.hs)
+                filename = os.path.basename(extra_file)
+            else:
+                filename = extra_file
+            assert not '..' in filename # no funny stuff (foo/../../bar)
             dst = in_testdir(filename)
 
             if os.path.isfile(src):
@@ -821,7 +811,7 @@ def do_test(name, way, func, args, files):
                     pass
                 else:
                     framework_fail(name, way,
-                        'extra_file does not exist: ' + filename)
+                        'extra_file does not exist: ' + extra_file)
 
         if not files:
             # Always create the testdir, even when no files were copied
index d7e65bb..b5ea5a3 100644 (file)
@@ -192,11 +192,20 @@ RUNTEST_OPTS += --skip-perf-tests
 endif
 
 ifeq "$(CLEANUP)" "0"
-RUNTEST_OPTS += -e cleanup=False
+RUNTEST_OPTS += -e config.cleanup=False
 else ifeq "$(CLEANUP)" "NO"
-RUNTEST_OPTS += -e cleanup=False
+RUNTEST_OPTS += -e config.cleanup=False
 else
-RUNTEST_OPTS += -e cleanup=True
+RUNTEST_OPTS += -e config.cleanup=True
+endif
+
+ifeq "$(LOCAL)" "0"
+# See Note [Running tests in /tmp].
+RUNTEST_OPTS += -e config.local=False
+else ifeq "$(LOCAL)" "NO"
+RUNTEST_OPTS += -e config.local=False
+else
+RUNTEST_OPTS += -e config.local=True
 endif
 
 RUNTEST_OPTS +=  \
index 113eadf..b17d205 100644 (file)
@@ -35,9 +35,7 @@ test('print031', normal, ghci_script, ['print031.script'])
 test('print032', normal, ghci_script, ['print032.script'])
 test('print033', normal, ghci_script, ['print033.script'])
 test('print034', normal, ghci_script, ['print034.script'])
-test('print035',
-     [extra_clean(['../Unboxed.hi', '../Unboxed.o'])],
-     ghci_script, ['print035.script'])
+test('print035', normal, ghci_script, ['print035.script'])
 test('print036', expect_broken(9046), ghci_script, ['print036.script'])
 
 test('break001', normal, ghci_script, ['break001.script'])
index 99ffda0..50be9af 100644 (file)
@@ -1,9 +1,9 @@
-Breakpoint 0 activated at ../Test2.hs:3:7-9
-Breakpoint 1 activated at ../Test2.hs:5:7
-Stopped in Test2.f, ../Test2.hs:3:7-9
+Breakpoint 0 activated at Test2.hs:3:7-9
+Breakpoint 1 activated at Test2.hs:5:7
+Stopped in Test2.f, Test2.hs:3:7-9
 _result :: Integer = _
 x :: Integer = 1
-Stopped in Test2.g, ../Test2.hs:5:7
+Stopped in Test2.g, Test2.hs:5:7
 _result :: Integer = _
 y :: Integer = 1
 y :: Integer = 1
index 0bc2605..adc6a14 100644 (file)
@@ -1,5 +1,5 @@
 -- can't set breakpoints on non-interpreted things:
 :b Data.List.map
 
-:l ../Test2.hs
+:l Test2.hs
 :b Data.List.map
index d510a47..19d7a44 100644 (file)
@@ -1,5 +1,5 @@
-Breakpoint 0 activated at ../Test3.hs:2:18-31
-Stopped in Main.mymap, ../Test3.hs:2:18-31
+Breakpoint 0 activated at Test3.hs:2:18-31
+Stopped in Main.mymap, Test3.hs:2:18-31
 _result :: [a] = _
 f :: t -> a = _
 x :: t = _
index e4bb16f..12421ab 100644 (file)
@@ -1,4 +1,4 @@
-:l ../Test4.hs
+:l Test4.hs
 :b f
 seq (f (+(1::Int)) "abc") ()
 -- We can subvert the Unknown machinery this was and pass the string
index 35e92d4..4311e70 100644 (file)
@@ -1,9 +1,9 @@
-Stopped in QSort.qsort, ../QSort.hs:5:16-51
+Stopped in QSort.qsort, QSort.hs:5:16-51
 _result :: [Integer] = _
 a :: Integer = 1
 left :: [Integer] = _
 right :: [Integer] = _
-Stopped in QSort.qsort, ../QSort.hs:5:17-26
+Stopped in QSort.qsort, QSort.hs:5:17-26
 _result :: [a] = _
 left :: [a] = _
 ()
index 6cbc050..9546290 100644 (file)
@@ -1,4 +1,4 @@
-:l ../Test3.hs
+:l Test3.hs
 :st mymap (+1) [1::Integer,2,3]
 :show bindings
 f x -- should fail, unknown return type
index 35fa445..8a2463f 100644 (file)
@@ -1,4 +1,4 @@
-Stopped in Main.mymap, ../Test3.hs:2:18-31
+Stopped in Main.mymap, Test3.hs:2:18-31
 _result :: [a] = _
 f :: Integer -> a = _
 x :: Integer = 1
index 0cdf756..700182e 100644 (file)
@@ -1,5 +1,5 @@
-:l ../Test3
+:l Test3
 :b 1
 mymap id []
 -- second load, should discard the breakpoints without blowing up
-:l ../Test3.hs
+:l Test3.hs
index 1a8427f..8af6ed3 100644 (file)
@@ -1,3 +1,3 @@
-Breakpoint 0 activated at ../Test3.hs:1:14-15
-Stopped in Main.mymap, ../Test3.hs:1:14-15
+Breakpoint 0 activated at Test3.hs:1:14-15
+Stopped in Main.mymap, Test3.hs:1:14-15
 _result :: [a] = _
index 3e43b07..7a1857f 100644 (file)
@@ -1,7 +1,7 @@
-:l ../Test6.hs
+:l Test6.hs
 :b 5
 main
 -- stopped now
-:l ../Test6.hs
+:l Test6.hs
 main
 -- should not break
index d870b8f..ab09ffa 100644 (file)
@@ -1,4 +1,4 @@
-Breakpoint 0 activated at ../Test6.hs:5:8-11
-Stopped in Main.main, ../Test6.hs:5:8-11
+Breakpoint 0 activated at Test6.hs:5:8-11
+Stopped in Main.main, Test6.hs:5:8-11
 _result :: a = _
 *** Exception: Prelude.head: empty list
index 91e0d21..7273cb5 100644 (file)
@@ -1,5 +1,5 @@
-Breakpoint 0 activated at ../Test6.hs:5:8-11
-Stopped in Main.main, ../Test6.hs:5:8-11
+Breakpoint 0 activated at Test6.hs:5:8-11
+Stopped in Main.main, Test6.hs:5:8-11
 _result :: a = _
-Stopped in Main.main, ../Test6.hs:5:8-11
+Stopped in Main.main, Test6.hs:5:8-11
 _result :: a = _
index e913a2f..af3f301 100644 (file)
@@ -3,7 +3,7 @@ error "foo"
 :set -fbreak-on-exception
 error "foo"
 :abandon
-:l ../Test7.hs
+:l Test7.hs
 :tr main
 :hist
 :back
index c49db52..47fb7b1 100644 (file)
@@ -5,15 +5,15 @@ Stopped in <exception thrown>, <unknown>
 _exception :: e = _
 Stopped in <exception thrown>, <unknown>
 _exception :: e = _
--1  : main (../Test7.hs:2:18-28)
--2  : main (../Test7.hs:2:8-29)
+-1  : main (Test7.hs:2:18-28)
+-2  : main (Test7.hs:2:8-29)
 <end of history>
-Logged breakpoint at ../Test7.hs:2:18-28
+Logged breakpoint at Test7.hs:2:18-28
 _result :: a
-Logged breakpoint at ../Test7.hs:2:8-29
+Logged breakpoint at Test7.hs:2:8-29
 _result :: IO a
 no more logged breakpoints
-Logged breakpoint at ../Test7.hs:2:18-28
+Logged breakpoint at Test7.hs:2:18-28
 _result :: a
 Stopped at <unknown>
 _exception :: e
@@ -22,28 +22,28 @@ _exception = SomeException
                (ErrorCallWithLocation
                   "foo"
                   "CallStack (from HasCallStack):
-  error, called at ../Test7.hs:2:18 in main:Main")
+  error, called at Test7.hs:2:18 in main:Main")
 _result :: a = _
 _exception :: SomeException = SomeException
                                 (ErrorCallWithLocation
                                    "foo"
                                    "CallStack (from HasCallStack):
-  error, called at ../Test7.hs:2:18 in main:Main")
+  error, called at Test7.hs:2:18 in main:Main")
 *** Exception: foo
 CallStack (from HasCallStack):
-  error, called at ../Test7.hs:2:18 in main:Main
+  error, called at Test7.hs:2:18 in main:Main
 Stopped in <exception thrown>, <unknown>
 _exception :: e = SomeException
                     (ErrorCallWithLocation
                        "foo"
                        "CallStack (from HasCallStack):
-  error, called at ../Test7.hs:2:18 in main:Main")
+  error, called at Test7.hs:2:18 in main:Main")
 Stopped in <exception thrown>, <unknown>
 _exception :: e = SomeException
                     (ErrorCallWithLocation
                        "foo"
                        "CallStack (from HasCallStack):
-  error, called at ../Test7.hs:2:18 in main:Main")
+  error, called at Test7.hs:2:18 in main:Main")
 *** Exception: foo
 CallStack (from HasCallStack):
-  error, called at ../Test7.hs:2:18 in main:Main
+  error, called at Test7.hs:2:18 in main:Main
index 05c99ac..8873b1a 100644 (file)
@@ -1,4 +1,4 @@
-:l ../QSort.hs
+:l QSort.hs
 :set -fbreak-on-exception
 :trace qsort ("abc" ++ undefined)
 :back
index 7a1664d..0de6e66 100644 (file)
@@ -1,6 +1,6 @@
 "Stopped in <exception thrown>, <unknown>
 _exception :: e = _
-Logged breakpoint at ../QSort.hs:6:24-38
+Logged breakpoint at QSort.hs:6:24-38
 _result :: [Char]
 a :: Char
 as :: [Char]
index a30af6b..e26face 100644 (file)
@@ -2,7 +2,7 @@
 -- Maybe we should not want to put in scope the things binded in the mdo scope, to avoid silliness.
 
 :set -XRecursiveDo
-:l ../mdo.hs
+:l mdo.hs
 :st l2dll "hello world"
 :st
 :st
index 4ca3d6a..cb6fa51 100644 (file)
@@ -1,13 +1,13 @@
-Stopped in Main.l2dll, ../mdo.hs:(30,16)-(32,27)
+Stopped in Main.l2dll, mdo.hs:(30,16)-(32,27)
 _result :: IO (N Char) = _
 x :: Char = 'h'
 xs :: [Char] = _
-Stopped in Main.l2dll, ../mdo.hs:30:30-42
+Stopped in Main.l2dll, mdo.hs:30:30-42
 _result :: IO (N Char) = _
 f :: N Char = _
 l :: N Char = _
 x :: Char = 'h'
-Stopped in Main.newNode, ../mdo.hs:(8,17)-(9,42)
+Stopped in Main.newNode, mdo.hs:(8,17)-(9,42)
 _result :: IO (N Char) = _
 b :: N Char = _
 c :: Char = 'h'
index 895ce8b..f9c2d20 100644 (file)
@@ -1,6 +1,6 @@
-Breakpoint 0 activated at ../QSort.hs:4:12-13
-Breakpoint 1 activated at ../QSort.hs:5:16-51
-Stopped in QSort.qsort, ../QSort.hs:5:16-51
+Breakpoint 0 activated at QSort.hs:4:12-13
+Breakpoint 1 activated at QSort.hs:5:16-51
+Stopped in QSort.qsort, QSort.hs:5:16-51
 _result :: [Integer] = _
 a :: Integer = 3
 left :: [Integer] = _
index 95c1ab6..71c18ff 100644 (file)
@@ -1,7 +1,7 @@
 
 :set -fprint-explicit-foralls
 
-:l ../QSort
+:l QSort
 
 :delete 1        
 -- Illegal: empty breakpoint list
index 043e023..4d42982 100644 (file)
@@ -1,6 +1,6 @@
 -- :abandon stops a debugging session 
 
-:l ../QSort
+:l QSort
 :break QSort 5
 run
 :abandon
index f4d7444..ef46c58 100644 (file)
@@ -1,5 +1,5 @@
-Breakpoint 0 activated at ../QSort.hs:5:16-51
-Stopped in QSort.qsort, ../QSort.hs:5:16-51
+Breakpoint 0 activated at QSort.hs:5:16-51
+Stopped in QSort.qsort, QSort.hs:5:16-51
 _result :: [Integer] = _
 a :: Integer = 8
 left :: [Integer] = _
index eb0bad6..43cee16 100644 (file)
@@ -1,7 +1,7 @@
 -- Instrumentation of mdo notation 
                                    
 :set -XRecursiveDo
-:l ../mdo.hs
+:l mdo.hs
 :break Main 13
 :break Main 12
 :break Main 11
index dfdfc45..af7100e 100644 (file)
@@ -1,4 +1,4 @@
-Breakpoint 0 activated at ../mdo.hs:13:16-30
-Breakpoint 1 activated at ../mdo.hs:12:16-30
-Breakpoint 2 activated at ../mdo.hs:11:16-30
-Breakpoint 3 activated at ../mdo.hs:14:16-30
+Breakpoint 0 activated at mdo.hs:13:16-30
+Breakpoint 1 activated at mdo.hs:12:16-30
+Breakpoint 2 activated at mdo.hs:11:16-30
+Breakpoint 3 activated at mdo.hs:14:16-30
index 3169eb6..27a3df2 100644 (file)
@@ -1,3 +1,3 @@
-Stopped in Main.main, ../getargs.hs:3:8-24
+Stopped in Main.main, getargs.hs:3:8-24
 _result :: IO () = _
 ["42"]
index 5f8eab6..a15b3b1 100644 (file)
@@ -1,4 +1,4 @@
-:l ../Test3.hs
+:l Test3.hs
 -- set a break on the [] case in map
 :b 1
 -- trace an execution
index 9ae5688..a19a34f 100644 (file)
@@ -1,21 +1,21 @@
-Breakpoint 0 activated at ../Test3.hs:1:14-15
-[2,3Stopped in Main.mymap, ../Test3.hs:1:14-15
+Breakpoint 0 activated at Test3.hs:1:14-15
+[2,3Stopped in Main.mymap, Test3.hs:1:14-15
 _result :: [a] = _
--1  : mymap (../Test3.hs:2:22-31)
--2  : mymap (../Test3.hs:2:18-20)
--3  : mymap (../Test3.hs:2:18-31)
--4  : mymap (../Test3.hs:2:22-31)
--5  : mymap (../Test3.hs:2:18-20)
--6  : mymap (../Test3.hs:2:18-31)
+-1  : mymap (Test3.hs:2:22-31)
+-2  : mymap (Test3.hs:2:18-20)
+-3  : mymap (Test3.hs:2:18-31)
+-4  : mymap (Test3.hs:2:22-31)
+-5  : mymap (Test3.hs:2:18-20)
+-6  : mymap (Test3.hs:2:18-31)
 <end of history>
-Logged breakpoint at ../Test3.hs:2:22-31
+Logged breakpoint at Test3.hs:2:22-31
 _result :: [a]
 f :: t -> a
 xs :: [t]
 xs :: [t] = []
 f :: t -> a = _
 _result :: [a] = _
-Logged breakpoint at ../Test3.hs:2:18-20
+Logged breakpoint at Test3.hs:2:18-20
 _result :: a
 f :: Integer -> a
 x :: Integer
@@ -24,10 +24,10 @@ x :: Integer = 2
 f :: Integer -> a = _
 _result :: a = _
 _result = 3
-Logged breakpoint at ../Test3.hs:2:18-31
+Logged breakpoint at Test3.hs:2:18-31
 _result :: [a]
 f :: Integer -> a
 x :: Integer
 xs :: [Integer]
-Logged breakpoint at ../Test3.hs:2:18-20
+Logged breakpoint at Test3.hs:2:18-20
 _result :: a
index 767b27c..0409717 100644 (file)
@@ -4,7 +4,7 @@
 -- can't list a compiled module
 :list Data.List.map
 -- can't list a compiled module
-:l ../Test3.hs
+:l Test3.hs
 :list mymap
 :list main
 :list 4
index 629bb92..af39d13 100644 (file)
@@ -11,7 +11,7 @@ let i = Just (10::Integer)
 case i of Just j -> Control.Exception.evaluate j
 :p i
 
-:l ../Test.hs
+:l Test.hs
 
 let s = S1 'a' 'b' 'c'
 s
index f172ffb..e9f6094 100644 (file)
@@ -1,6 +1,6 @@
 -- Simple Recovery of types - opaque types
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 let t = O (map Just [[1,1],[2,2]])
 :p t
 -- should have bound _t1 now
index f08b775..49c0799 100644 (file)
@@ -1,6 +1,6 @@
 -- Recovery of types, polymorphic bindings inside a bkpt
 
-:l ../QSort
+:l QSort
 :break 5
 qsort [8::Integer, 4]
 
index 171055a..40e5104 100644 (file)
@@ -1,5 +1,5 @@
-Breakpoint 0 activated at ../QSort.hs:5:16-51
-Stopped in QSort.qsort, ../QSort.hs:5:16-51
+Breakpoint 0 activated at QSort.hs:5:16-51
+Stopped in QSort.qsort, QSort.hs:5:16-51
 _result :: [Integer] = _
 a :: Integer = 8
 left :: [Integer] = _
@@ -12,7 +12,7 @@ left = (_t2::[Integer])
 left = 4 : (_t3::[Integer])
 1
 left = [4]
-Stopped in QSort.qsort, ../QSort.hs:5:16-51
+Stopped in QSort.qsort, QSort.hs:5:16-51
 _result :: [Integer] = _
 a :: Integer = 4
 left :: [Integer] = _
index 4afd178..782dee6 100644 (file)
@@ -2,7 +2,7 @@
 -- This scenario demands propagation of types up in the tree of terms
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test 
+:l Test 
 let t = O (map Just [[1,1],[2,2]])
 :p t
 seq _t1 ()  -- The contents of the opaque
index 69fbb4d..548d6ea 100644 (file)
@@ -5,7 +5,7 @@
 -- but they seem to be not.
 -- So this test fails with wrong output
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 
 let s = S2 'a' 'b'
 seq s ()
@@ -13,7 +13,7 @@ seq s ()
 
 :set -funbox-strict-fields 
 :l
-:l ../Test
+:l Test
 
 let s = S2 'a' 'b'
 seq s ()
@@ -22,7 +22,7 @@ seq s ()
 
 :set -funbox-strict-fields -O
 :l
-:l ../Test
+:l Test
 
 let s = S2 'a' 'b'
 seq s ()
index 52ca7dc..51b44a6 100644 (file)
@@ -2,7 +2,7 @@
 -- testing that tyvars are instantiated to unknown
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 let t = O (map Just [[1,1],[2,2]])
 
 :p t
index 4b488fa..857f926 100644 (file)
@@ -1,7 +1,7 @@
 -- Another tricky type reconstruction case
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 
 let o = O (map id [0..3])
 :p o
index 9d200dc..fec9d9a 100644 (file)
@@ -1,7 +1,7 @@
 -- Type reconstruction with newtypes involved
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 
 let i = map (Just . Just) [My 1 .. My 3]
 :p i
index a24a6a6..61b654a 100644 (file)
@@ -1,6 +1,6 @@
 :set -XGADTs -XRankNTypes -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../GADT
-:a ../Test
+:l GADT
+:a Test
 :m +Main
 let o = O (id foo)
 :p o
index cc80c29..cf8fdad 100644 (file)
@@ -1,7 +1,7 @@
 -- Test handling of extra fields in the representation due to dictionaries
 
 :set -XGADTs -XRankNTypes
-:l ../GADT
+:l GADT
 
 let d = DictN (1 :: Integer)
 :p d
index e6d5958..2758d25 100644 (file)
@@ -1,7 +1,7 @@
 -- Test handling of extra fields in the representation due to existentials.
 
 :set -XGADTs -XRankNTypes
-:l ../GADT
+:l GADT
 
 let e = Exist 1
 :p e
index aa5cb04..f27122d 100644 (file)
@@ -1,7 +1,7 @@
 -- Type reconstruction with newtypes involved, more gruesome. 
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 let a = map MkT [1::Integer .. 2]
 :p a
 seq _t1 ()
index d049ffd..861294c 100644 (file)
@@ -1,7 +1,7 @@
 -- More newtypes goodness
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 let a = map (MkT2 . MkT) [1::Integer .. 2]
 :p a
 seq _t1 ()
index 12f7cc1..c0f8ae0 100644 (file)
@@ -2,7 +2,7 @@
 -- Found by Bernie Pope
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 
 :break poly
 poly Unary
index 3f070f7..e0ab829 100644 (file)
@@ -1,5 +1,5 @@
-Breakpoint 0 activated at ../Test.hs:40:10-17
-Stopped in Test.Test2.poly, ../Test.hs:40:10-17
+Breakpoint 0 activated at Test.hs:40:10-17
+Stopped in Test.Test2.poly, Test.hs:40:10-17
 _result :: () = _
 x :: a = _
 x = (_t1::a)
index a765372..b4a6d2b 100644 (file)
@@ -1,5 +1,5 @@
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 let a = O (id 'a')
 let b = O (id "abc")
 :p a
index e010195..026bb4d 100644 (file)
@@ -1,5 +1,5 @@
 :set -fno-warn-overlapping-patterns
-:l ../HappyTest.hs
+:l HappyTest.hs
 :break lexer
 main
 :force _result
index bbeeae1..991ed11 100644 (file)
@@ -1,18 +1,18 @@
-Breakpoint 0 activated at ../HappyTest.hs:226:12-13
-Breakpoint 1 activated at ../HappyTest.hs:228:11-19
-Breakpoint 2 activated at ../HappyTest.hs:228:23-30
-Breakpoint 3 activated at ../HappyTest.hs:229:11-19
-Breakpoint 4 activated at ../HappyTest.hs:229:23-35
-Breakpoint 5 activated at ../HappyTest.hs:230:11-19
-Breakpoint 6 activated at ../HappyTest.hs:230:23-35
-Breakpoint 7 activated at ../HappyTest.hs:231:18-35
-Breakpoint 8 activated at ../HappyTest.hs:232:18-37
-Breakpoint 9 activated at ../HappyTest.hs:233:18-38
-Breakpoint 10 activated at ../HappyTest.hs:234:18-38
-Breakpoint 11 activated at ../HappyTest.hs:235:18-36
-Breakpoint 12 activated at ../HappyTest.hs:236:18-35
-Breakpoint 13 activated at ../HappyTest.hs:237:18-35
-Stopped in Main.lexer, ../HappyTest.hs:228:11-19
+Breakpoint 0 activated at HappyTest.hs:226:12-13
+Breakpoint 1 activated at HappyTest.hs:228:11-19
+Breakpoint 2 activated at HappyTest.hs:228:23-30
+Breakpoint 3 activated at HappyTest.hs:229:11-19
+Breakpoint 4 activated at HappyTest.hs:229:23-35
+Breakpoint 5 activated at HappyTest.hs:230:11-19
+Breakpoint 6 activated at HappyTest.hs:230:23-35
+Breakpoint 7 activated at HappyTest.hs:231:18-35
+Breakpoint 8 activated at HappyTest.hs:232:18-37
+Breakpoint 9 activated at HappyTest.hs:233:18-38
+Breakpoint 10 activated at HappyTest.hs:234:18-38
+Breakpoint 11 activated at HappyTest.hs:235:18-36
+Breakpoint 12 activated at HappyTest.hs:236:18-35
+Breakpoint 13 activated at HappyTest.hs:237:18-35
+Stopped in Main.lexer, HappyTest.hs:228:11-19
 _result :: Bool = _
 c :: Char = '1'
 *** Ignoring breakpoint
index 95f37ff..512015f 100644 (file)
@@ -1,7 +1,7 @@
 -- Another type reconstruction with newtypes test
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 
 let a = MkT [1::Integer .. 2]
 seq a ()
index 381676e..8b951c6 100644 (file)
@@ -1,7 +1,7 @@
 -- stg_ap_rep exception after using :print with newtypes
 
 :set -XExistentialQuantification -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../Test
+:l Test
 
 let a = MkT (1 :: Integer)
 seq a ()
index 39f2743..eaa53ad 100644 (file)
@@ -1,8 +1,8 @@
 -- More GADT goodness
 
 :set -XGADTs -XRankNTypes -XDeriveDataTypeable -XGeneralizedNewtypeDeriving
-:l ../GADT
-:a ../Test
+:l GADT
+:a Test
 :m +Main
 let o = O (One False Main.Nil)
 :p o
index fece23b..d5d48dd 100644 (file)
@@ -2,7 +2,7 @@
 -- handled correctly by RtClosureInspect
 
 :set -XUnboxedTuples -fobject-code
-:l ../Unboxed
+:l Unboxed
 :p o1
 :p o2
 force_them
index c30f4fe..3d0e973 100644 (file)
@@ -1,6 +1,6 @@
 :unset +s
 
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 
 -- first, tidy up:
index 02d9362..34f5d91 100644 (file)
@@ -1,7 +1,7 @@
 :unset +s
 :unset +t
 
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 
 -- first, clean up:
index 66490a0..9ad7d33 100644 (file)
@@ -7,7 +7,7 @@
 -- versions of each module, and make sure each combination behaves
 -- sensibly.
 
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 
 -- clean up
index f86829b..49e3308 100644 (file)
@@ -1,6 +1,6 @@
 -- test for #1205
 
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 
 :shell rm -f A.o A.hi B.o B.hi
index 5e17838..8f438ec 100644 (file)
@@ -1,4 +1,4 @@
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 :l
 
index 3fc6aff..3ff0bee 100755 (executable)
@@ -1,6 +1,6 @@
 -- Test -fwarn-type-errors
 -- This test shows how each error is printed at runtime
-:l ../../typecheck/should_run/Defer01
+:l Defer01
 t5624
 print a
 print (b B)
@@ -11,4 +11,4 @@ print (h ())
 print (i ())
 print j
 print (k 2)
-l
\ No newline at end of file
+l
index bcc6c5e..f845b63 100644 (file)
@@ -1,5 +1,5 @@
 \r
-..\..\typecheck\should_run\Defer01.hs:11:40: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:11:40: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match type ‘Char’ with ‘[Char]’\r
       Expected type: String\r
         Actual type: Char\r
@@ -7,21 +7,21 @@
       In the second argument of ‘(>>)’, namely ‘putStr ','’\r
       In the expression: putStr "Hello World" >> putStr ','\r
 \r
-..\..\typecheck\should_run\Defer01.hs:14:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:14:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match expected type ‘Int’ with actual type ‘Char’\r
     • In the expression: 'p'\r
       In an equation for ‘a’: a = 'p'\r
 \r
-..\..\typecheck\should_run\Defer01.hs:18:7: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:18:7: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • No instance for (Eq B) arising from a use of ‘==’\r
     • In the expression: x == x\r
       In an equation for ‘b’: b x = x == x\r
 \r
-..\..\typecheck\should_run\Defer01.hs:25:1: warning: [-Woverlapping-patterns (in -Wdefault)]\r
+Defer01.hs:25:1: warning: [-Woverlapping-patterns (in -Wdefault)]\r
     Pattern match has inaccessible right hand side\r
     In an equation for ‘c’: c (C2 x) = ...\r
 \r
-..\..\typecheck\should_run\Defer01.hs:25:4: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:25:4: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match type ‘Int’ with ‘Bool’\r
       Inaccessible code in\r
         a pattern with constructor: C2 :: Bool -> C Bool,\r
     • In the pattern: C2 x\r
       In an equation for ‘c’: c (C2 x) = True\r
 \r
-..\..\typecheck\should_run\Defer01.hs:28:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:28:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • No instance for (Num (a -> a)) arising from the literal ‘1’\r
         (maybe you haven't applied a function to enough arguments?)\r
     • In the expression: 1\r
       In an equation for ‘d’: d = 1\r
 \r
-..\..\typecheck\should_run\Defer01.hs:31:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:31:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match expected type ‘Char -> t’ with actual type ‘Char’\r
     • The function ‘e’ is applied to one argument,\r
       but its type ‘Char’ has none\r
       In the expression: e 'q'\r
       In an equation for ‘f’: f = e 'q'\r
     • Relevant bindings include\r
-        f :: t (bound at ..\..\typecheck\should_run\Defer01.hs:31:1)\r
+        f :: t (bound at Defer01.hs:31:1)\r
 \r
-..\..\typecheck\should_run\Defer01.hs:34:8: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:34:8: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match expected type ‘Char’ with actual type ‘a’\r
       ‘a’ is a rigid type variable bound by\r
         the type signature for:\r
           h :: forall a. a -> (Char, Char)\r
-        at ..\..\typecheck\should_run\Defer01.hs:33:1-21\r
+        at Defer01.hs:33:1-21\r
     • In the expression: x\r
       In the expression: (x, 'c')\r
       In an equation for ‘h’: h x = (x, 'c')\r
     • Relevant bindings include\r
-        x :: a (bound at ..\..\typecheck\should_run\Defer01.hs:34:3)\r
+        x :: a (bound at Defer01.hs:34:3)\r
         h :: a -> (Char, Char)\r
-          (bound at ..\..\typecheck\should_run\Defer01.hs:34:1)\r
+          (bound at Defer01.hs:34:1)\r
 \r
-..\..\typecheck\should_run\Defer01.hs:39:17: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:39:17: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match expected type ‘Bool’ with actual type ‘T a’\r
     • In the first argument of ‘not’, namely ‘(K a)’\r
       In the expression: (not (K a))\r
       In the expression: seq (not (K a)) ()\r
     • Relevant bindings include\r
-        a :: a (bound at ..\..\typecheck\should_run\Defer01.hs:39:3)\r
-        i :: a -> () (bound at ..\..\typecheck\should_run\Defer01.hs:39:1)\r
+        a :: a (bound at Defer01.hs:39:3)\r
+        i :: a -> () (bound at Defer01.hs:39:1)\r
 \r
-..\..\typecheck\should_run\Defer01.hs:43:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:43:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • No instance for (MyClass a1) arising from a use of ‘myOp’\r
     • In the expression: myOp 23\r
       In an equation for ‘j’: j = myOp 23\r
 \r
-..\..\typecheck\should_run\Defer01.hs:43:10: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:43:10: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Ambiguous type variable ‘a1’ arising from the literal ‘23’\r
       prevents the constraint ‘(Num a1)’ from being solved.\r
       Probable fix: use a type annotation to specify what ‘a1’ should be.\r
       In the expression: myOp 23\r
       In an equation for ‘j’: j = myOp 23\r
 \r
-..\..\typecheck\should_run\Defer01.hs:45:1: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:45:1: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     Couldn't match type ‘Int’ with ‘Bool’\r
     Inaccessible code in\r
       the type signature for:\r
         k :: Int ~ Bool => Int -> Bool\r
 \r
-..\..\typecheck\should_run\Defer01.hs:45:6: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:45:6: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match type ‘Int’ with ‘Bool’\r
       Inaccessible code in\r
         the type signature for:\r
       To defer the ambiguity check to use sites, enable AllowAmbiguousTypes\r
       In the type signature: k :: (Int ~ Bool) => Int -> Bool\r
 \r
-..\..\typecheck\should_run\Defer01.hs:46:1: warning: [-Woverlapping-patterns (in -Wdefault)]\r
+Defer01.hs:46:1: warning: [-Woverlapping-patterns (in -Wdefault)]\r
     Pattern match is redundant\r
     In an equation for ‘k’: k x = ...\r
 \r
-..\..\typecheck\should_run\Defer01.hs:49:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
+Defer01.hs:49:5: warning: [-Wdeferred-type-errors (in -Wdefault)]\r
     • Couldn't match expected type ‘IO a0’\r
                   with actual type ‘Char -> IO ()’\r
     • Probable cause: ‘putChar’ is applied to too few arguments\r
       In the first argument of ‘(>>)’, namely ‘putChar’\r
       In the expression: putChar >> putChar 'p'\r
       In an equation for ‘l’: l = putChar >> putChar 'p'\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:11:40: error:\r
+*** Exception: Defer01.hs:11:40: error:\r
     • Couldn't match type ‘Char’ with ‘[Char]’\r
       Expected type: String\r
         Actual type: Char\r
       In the second argument of ‘(>>)’, namely ‘putStr ','’\r
       In the expression: putStr "Hello World" >> putStr ','\r
 (deferred type error)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:14:5: error:\r
+*** Exception: Defer01.hs:14:5: error:\r
     • Couldn't match expected type ‘Int’ with actual type ‘Char’\r
     • In the expression: 'p'\r
       In an equation for ‘a’: a = 'p'\r
 (deferred type error)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:18:7: error:\r
+*** Exception: Defer01.hs:18:7: error:\r
     • No instance for (Eq B) arising from a use of ‘==’\r
     • In the expression: x == x\r
       In an equation for ‘b’: b x = x == x\r
     • In the first argument of ‘c’, namely ‘(C2 True)’\r
       In the first argument of ‘print’, namely ‘(c (C2 True))’\r
       In the expression: print (c (C2 True))\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:28:5: error:\r
+*** Exception: Defer01.hs:28:5: error:\r
     • No instance for (Num (a -> a)) arising from the literal ‘1’\r
         (maybe you haven't applied a function to enough arguments?)\r
     • In the expression: 1\r
       In an equation for ‘d’: d = 1\r
 (deferred type error)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:31:5: error:\r
+*** Exception: Defer01.hs:31:5: error:\r
     • Couldn't match expected type ‘Char -> t’ with actual type ‘Char’\r
     • The function ‘e’ is applied to one argument,\r
       but its type ‘Char’ has none\r
       In the expression: e 'q'\r
       In an equation for ‘f’: f = e 'q'\r
     • Relevant bindings include\r
-        f :: t (bound at ..\..\typecheck\should_run\Defer01.hs:31:1)\r
+        f :: t (bound at Defer01.hs:31:1)\r
 (deferred type error)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:34:8: error:\r
+*** Exception: Defer01.hs:34:8: error:\r
     • Couldn't match expected type ‘Char’ with actual type ‘a’\r
       ‘a’ is a rigid type variable bound by\r
         the type signature for:\r
           h :: forall a. a -> (Char, Char)\r
-        at ..\..\typecheck\should_run\Defer01.hs:33:1-21\r
+        at Defer01.hs:33:1-21\r
     • In the expression: x\r
       In the expression: (x, 'c')\r
       In an equation for ‘h’: h x = (x, 'c')\r
     • Relevant bindings include\r
-        x :: a (bound at ..\..\typecheck\should_run\Defer01.hs:34:3)\r
+        x :: a (bound at Defer01.hs:34:3)\r
         h :: a -> (Char, Char)\r
-          (bound at ..\..\typecheck\should_run\Defer01.hs:34:1)\r
+          (bound at Defer01.hs:34:1)\r
 (deferred type error)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:39:17: error:\r
+*** Exception: Defer01.hs:39:17: error:\r
     • Couldn't match expected type ‘Bool’ with actual type ‘T a’\r
     • In the first argument of ‘not’, namely ‘(K a)’\r
       In the expression: (not (K a))\r
       In the expression: seq (not (K a)) ()\r
     • Relevant bindings include\r
-        a :: a (bound at ..\..\typecheck\should_run\Defer01.hs:39:3)\r
-        i :: a -> () (bound at ..\..\typecheck\should_run\Defer01.hs:39:1)\r
+        a :: a (bound at Defer01.hs:39:3)\r
+        i :: a -> () (bound at Defer01.hs:39:1)\r
 (deferred type error)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:43:5: error:\r
+*** Exception: Defer01.hs:43:5: error:\r
     • No instance for (MyClass a1) arising from a use of ‘myOp’\r
     • In the expression: myOp 23\r
       In an equation for ‘j’: j = myOp 23\r
     • In the first argument of ‘print’, namely ‘(k 2)’\r
       In the expression: print (k 2)\r
       In an equation for ‘it’: it = print (k 2)\r
-*** Exception: ..\..\typecheck\should_run\Defer01.hs:49:5: error:\r
+*** Exception: Defer01.hs:49:5: error:\r
     • Couldn't match expected type ‘IO a0’\r
                   with actual type ‘Char -> IO ()’\r
     • Probable cause: ‘putChar’ is applied to too few arguments\r
index be6de46..e876154 100644 (file)
@@ -1,4 +1,4 @@
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 :l
 
index 871de86..0f77a7a 100644 (file)
@@ -1,6 +1,6 @@
 import Data.Maybe
 :browse
-:l ../prog002/A1.hs
+:l prog002/A1.hs
 :browse
-:add ../prog002/B.hs
+:add prog002/B.hs
 :browse
index fabc8b5..c534cfc 100644 (file)
@@ -1,5 +1,5 @@
 -- Tests for ":show imports" and import/:module
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 :l
 
index a05aa73..c9bbd69 100644 (file)
@@ -1,5 +1,5 @@
 
-:l ../shell.hs
+:l shell.hs
 :def shell (\s -> do shell s; return "")
 
 :set prompt ""
index b4600d4..3160a8a 100644 (file)
@@ -47,7 +47,7 @@ test('haddock.base',
             # 2016-04-06: 5509757068 (x86/Linux)
       ],
      stats,
-     ['../../../../libraries/base/dist-install/haddock.t'])
+     ['haddock.t'])
 
 test('haddock.Cabal',
      [unless(in_tree_compiler(), skip), req_haddock
@@ -97,7 +97,7 @@ test('haddock.Cabal',
             # 2016-04-06: 6268156056 (x86/Linux)
       ],
      stats,
-     ['../../../../libraries/Cabal/Cabal/dist-install/haddock.t'])
+     ['haddock.t'])
 
 test('haddock.compiler',
      [unless(in_tree_compiler(), skip), req_haddock
@@ -131,4 +131,4 @@ test('haddock.compiler',
             # 2016-04-06: 16222702892 (x86/Linux)
       ],
      stats,
-     ['../../../../compiler/stage2/haddock.t'])
+     ['haddock.t'])
index d039f68..caf4eff 100644 (file)
@@ -68,7 +68,7 @@ test('lazy-bs-alloc',
             # 2014-01-28: Widen 1->2% (x86/Windows was at 425212)
             # 2016-04-06: 429760 (x86/Linux) no idea what happened
       only_ways(['normal']),
-      extra_run_opts('../../numeric/should_run/arith011.stdout'),
+      extra_run_opts('arith011.stdout'),
       ignore_output,
 
       # Use `+RTS -G1` for more stable residency measurements. Note [residency].
index f03309e..f15e8a0 100644 (file)
@@ -69,7 +69,7 @@ test('T2783', [ omit_ways(['ghci']), exit_code(1) ], compile_and_run, [''])
 test('testwsdeque', [unless(in_tree_compiler(), skip),
                     req_smp, # needs atomic 'cas'
                     c_src, only_ways(['threaded1', 'threaded2'])],
-                    compile_and_run, ['-I../../../rts'])
+                    compile_and_run, [''])
 
 test('T3236', [c_src, only_ways(['normal','threaded1']), exit_code(1)], compile_and_run, [''])
 
index ff51564..3efaf3a 100755 (executable)
--- a/validate
+++ b/validate
@@ -269,7 +269,8 @@ if [ $be_quiet -eq 1 ] && [ -z $VERBOSE ]; then
     TEST_VERBOSITY="VERBOSE=1 NO_PRINT_SUMMARY=YES"
 fi
 
-$make $MAKE_TEST_TARGET stage=2 $BINDIST $TEST_VERBOSITY THREADS=$threads 2>&1 | tee testlog
+# Use LOCAL=0, see Note [Running tests in /tmp].
+$make $MAKE_TEST_TARGET stage=2 $BINDIST LOCAL=0 $TEST_VERBOSITY THREADS=$threads 2>&1 | tee testlog
 
 check_packages post-testsuite