Index: tools/foozzie/v8_suppressions.py |
diff --git a/tools/foozzie/v8_suppressions.py b/tools/foozzie/v8_suppressions.py |
index 08260d334491654f2a6a7f85b4f11b520650496a..cf435dc40aec32970f59c6acdd05f53b232e96e2 100644 |
--- a/tools/foozzie/v8_suppressions.py |
+++ b/tools/foozzie/v8_suppressions.py |
@@ -148,6 +148,7 @@ IGNORE_LINES = [ |
ALLOWED_LINE_DIFFS = [re.compile(exp) for exp in ALLOWED_LINE_DIFFS] |
IGNORE_LINES = [re.compile(exp) for exp in IGNORE_LINES] |
+ORIGINAL_SOURCE_PREFIX = 'v8-foozzie source: ' |
def line_pairs(lines): |
return itertools.izip_longest( |
@@ -185,6 +186,14 @@ def ignore_by_regexp(line1, line2, allowed): |
def diff_output(output1, output2, allowed, ignore1, ignore2): |
+ """Returns a tuple (difference, source). |
+ |
+ The difference is None if there's no difference, otherwise a string |
+ with a readable diff. |
+ |
+ The source is a string with the last source output within the test case. |
+ It is the string 'none' if no such output existed. |
+ """ |
def useful_line(ignore): |
def fun(line): |
return all(not e.match(line) for e in ignore) |
@@ -193,6 +202,10 @@ def diff_output(output1, output2, allowed, ignore1, ignore2): |
lines1 = filter(useful_line(ignore1), output1) |
lines2 = filter(useful_line(ignore2), output2) |
+ # This keeps track where we are in the original source file of the fuzz |
+ # test case. |
+ source = 'none' |
+ |
for ((line1, lookahead1), (line2, lookahead2)) in itertools.izip_longest( |
line_pairs(lines1), line_pairs(lines2), fillvalue=(None, None)): |
@@ -201,12 +214,17 @@ def diff_output(output1, output2, allowed, ignore1, ignore2): |
# One iterator ends earlier. |
if line1 is None: |
- return '+ %s' % short_line_output(line2) |
+ return '+ %s' % short_line_output(line2), source |
if line2 is None: |
- return '- %s' % short_line_output(line1) |
+ return '- %s' % short_line_output(line1), source |
# If lines are equal, no further checks are necessary. |
if line1 == line2: |
+ # Instrumented original-source-file output must be equal in both |
+ # versions. It only makes sense to update it here when both lines |
+ # are equal. |
+ if line1.startswith(ORIGINAL_SOURCE_PREFIX): |
+ source = line1[len(ORIGINAL_SOURCE_PREFIX):] |
continue |
# Look ahead. If next line is a caret, ignore this line. |
@@ -218,10 +236,13 @@ def diff_output(output1, output2, allowed, ignore1, ignore2): |
continue |
# Lines are different. |
- return '- %s\n+ %s' % (short_line_output(line1), short_line_output(line2)) |
+ return ( |
+ '- %s\n+ %s' % (short_line_output(line1), short_line_output(line2)), |
+ source, |
+ ) |
# No difference found. |
- return None |
+ return None, source |
def get_suppression(arch1, config1, arch2, config2): |