summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Miedema <thomasmiedema@gmail.com>2016-02-22 17:44:17 +0100
committerThomas Miedema <thomasmiedema@gmail.com>2016-02-23 12:28:03 +0100
commit176be87cb28f675d87ea8f5c07eaef7ca47ff8de (patch)
treec8327c876974f71ae1cbe3ac5df2215a3ee12736
parent73e409555019d370f3644bdf02b37dd526de4d8a (diff)
downloadhaskell-176be87cb28f675d87ea8f5c07eaef7ca47ff8de.tar.gz
Filter out -prof callstacks from test output (#11521)
-rw-r--r--testsuite/driver/testglobals.py3
-rw-r--r--testsuite/driver/testlib.py19
-rw-r--r--testsuite/tests/profiling/should_run/all.T1
3 files changed, 20 insertions, 3 deletions
diff --git a/testsuite/driver/testglobals.py b/testsuite/driver/testglobals.py
index 0891624473..6f8dd647ca 100644
--- a/testsuite/driver/testglobals.py
+++ b/testsuite/driver/testglobals.py
@@ -265,6 +265,9 @@ class TestOptions:
# Extra normalisation for compiler error messages
self.extra_errmsg_normaliser = lambda x: x
+ # Keep profiling callstacks.
+ self.keep_prof_callstacks = False
+
# The directory the test is in
self.testdir = '.'
diff --git a/testsuite/driver/testlib.py b/testsuite/driver/testlib.py
index 9eb79e8ecb..1ebe6a7565 100644
--- a/testsuite/driver/testlib.py
+++ b/testsuite/driver/testlib.py
@@ -494,6 +494,13 @@ def normalise_drive_letter(name, opts):
# Windows only. Change D:\\ to C:\\.
_normalise_fun(name, opts, lambda str: re.sub(r'[A-Z]:\\', r'C:\\', str))
+def keep_prof_callstacks(name, opts):
+ """Keep profiling callstacks.
+
+ Use together with `only_ways(prof_ways)`.
+ """
+ opts.keep_prof_callstacks = True
+
def join_normalisers(*a):
"""
Compose functions, flattening sequences.
@@ -1669,15 +1676,21 @@ def normalise_whitespace( str ):
callSite_re = re.compile(r', called at (.+):[\d]+:[\d]+ in [\w\-\.]+:')
-def normalise_callstacks(str):
+def normalise_callstacks(s):
+ opts = getTestOpts()
def repl(matches):
location = matches.group(1)
location = normalise_slashes_(location)
return ', called at {0}:<line>:<column> in <package-id>:'.format(location)
# Ignore line number differences in call stacks (#10834).
- str1 = re.sub(callSite_re, repl, str)
+ s = re.sub(callSite_re, repl, s)
# Ignore the change in how we identify implicit call-stacks
- return str1.replace('from ImplicitParams', 'from HasCallStack')
+ s = s.replace('from ImplicitParams', 'from HasCallStack')
+ if not opts.keep_prof_callstacks:
+ # Don't output prof callstacks. Test output should be
+ # independent from the WAY we run the test.
+ s = re.sub(r'CallStack \(from -prof\):(\n .*)*\n?', '', s)
+ return s
tyCon_re = re.compile(r'TyCon\s*\d+L?\#\#\s*\d+L?\#\#\s*', flags=re.MULTILINE)
diff --git a/testsuite/tests/profiling/should_run/all.T b/testsuite/tests/profiling/should_run/all.T
index ae349e9254..707ade3731 100644
--- a/testsuite/tests/profiling/should_run/all.T
+++ b/testsuite/tests/profiling/should_run/all.T
@@ -15,6 +15,7 @@ test('T11489', [req_profiling, extra_clean(['T11489.prof', 'T11489.hp'])],
setTestOpts(req_profiling)
setTestOpts(extra_ways(['prof']))
setTestOpts(only_ways(prof_ways))
+setTestOpts(keep_prof_callstacks)
extra_prof_ways = ['prof', 'prof_hc_hb', 'prof_hb', 'prof_hd', 'prof_hy', 'prof_hr']