Filter out -prof callstacks from test output (#11521)
authorThomas Miedema <thomasmiedema@gmail.com>
Mon, 22 Feb 2016 16:44:17 +0000 (17:44 +0100)
committerThomas Miedema <thomasmiedema@gmail.com>
Tue, 23 Feb 2016 11:28:03 +0000 (12:28 +0100)
testsuite/driver/testglobals.py
testsuite/driver/testlib.py
testsuite/tests/profiling/should_run/all.T

index 0891624..6f8dd64 100644 (file)
@@ -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 = '.'
 
index 9eb79e8..1ebe6a7 100644 (file)
@@ -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)
 
index ae349e9..707ade3 100644 (file)
@@ -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']