Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(25)

Side by Side Diff: tools/foozzie/v8_suppressions.py

Issue 2625983002: [foozzie] Add suppressions based on metadata. (Closed)
Patch Set: Correct bug Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/foozzie/v8_foozzie.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2016 the V8 project authors. All rights reserved. 1 # Copyright 2016 the V8 project authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """ 5 """
6 Suppressions for V8 correctness fuzzer failures. 6 Suppressions for V8 correctness fuzzer failures.
7 7
8 We support three types of suppressions: 8 We support three types of suppressions:
9 1. Ignore test case by pattern. 9 1. Ignore test case by pattern.
10 Map a regular expression to a bug entry. A new failure will be reported 10 Map a regular expression to a bug entry. A new failure will be reported
(...skipping 15 matching lines...) Expand all
26 26
27 import itertools 27 import itertools
28 import re 28 import re
29 29
30 # Max line length for regular experessions checking for lines to ignore. 30 # Max line length for regular experessions checking for lines to ignore.
31 MAX_LINE_LENGTH = 512 31 MAX_LINE_LENGTH = 512
32 32
33 # For ignoring lines before carets and to ignore caret positions. 33 # For ignoring lines before carets and to ignore caret positions.
34 CARET_RE = re.compile(r'^\s*\^\s*$') 34 CARET_RE = re.compile(r'^\s*\^\s*$')
35 35
36 # Ignore by original source files. Map from bug->relative file paths in V8,
37 # e.g. '/v8/test/mjsunit/d8-performance-now.js' including /v8/. A test will
38 # be suppressed if one of the files below was used to mutate the test.
39 IGNORE_SOURCES = {
40 # This contains a usage of f.arguments that often fires.
41 'crbug.com/662424': '/v8/test/mjsunit/regress/regress-2989.js',
42 }
43
36 # Ignore by test case pattern. Map from bug->regexp. 44 # Ignore by test case pattern. Map from bug->regexp.
37 # Regular expressions are assumed to be compiled. We use regexp.match. 45 # Regular expressions are assumed to be compiled. We use regexp.match.
38 IGNORE_TEST_CASES = { 46 IGNORE_TEST_CASES = {
39 'crbug.com/662907': 47 'crbug.com/662907':
40 re.compile(r'.*new Array.*\[\d+\] =.*' 48 re.compile(r'.*new Array.*\[\d+\] =.*'
41 r'((Array)|(Object)).prototype.__defineSetter__.*', re.S), 49 r'((Array)|(Object)).prototype.__defineSetter__.*', re.S),
42 50
43 'crbug.com/663340': 51 'crbug.com/663340':
44 re.compile(r'.*\.shift\(\).*', re.S), 52 re.compile(r'.*\.shift\(\).*', re.S),
45 53
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 214
207 215
208 def get_suppression(arch1, config1, arch2, config2): 216 def get_suppression(arch1, config1, arch2, config2):
209 return V8Suppression(arch1, config1, arch2, config2) 217 return V8Suppression(arch1, config1, arch2, config2)
210 218
211 219
212 class Suppression(object): 220 class Suppression(object):
213 def diff(self, output1, output2): 221 def diff(self, output1, output2):
214 return None 222 return None
215 223
216 def ignore(self, testcase): 224 def ignore_by_metadata(self, metadata):
225 return False
226
227 def ignore_by_content(self, testcase):
217 return False 228 return False
218 229
219 def ignore_by_output1(self, output): 230 def ignore_by_output1(self, output):
220 return False 231 return False
221 232
222 def ignore_by_output2(self, output): 233 def ignore_by_output2(self, output):
223 return False 234 return False
224 235
225 236
226 class V8Suppression(Suppression): 237 class V8Suppression(Suppression):
227 def __init__(self, arch1, config1, arch2, config2): 238 def __init__(self, arch1, config1, arch2, config2):
228 self.arch1 = arch1 239 self.arch1 = arch1
229 self.config1 = config1 240 self.config1 = config1
230 self.arch2 = arch2 241 self.arch2 = arch2
231 self.config2 = config2 242 self.config2 = config2
232 243
233 def diff(self, output1, output2): 244 def diff(self, output1, output2):
234 return diff_output( 245 return diff_output(
235 output1.splitlines(), 246 output1.splitlines(),
236 output2.splitlines(), 247 output2.splitlines(),
237 ALLOWED_LINE_DIFFS, 248 ALLOWED_LINE_DIFFS,
238 IGNORE_LINES, 249 IGNORE_LINES,
239 IGNORE_LINES, 250 IGNORE_LINES,
240 ) 251 )
241 252
242 def ignore(self, testcase): 253 def ignore_by_content(self, testcase):
243 for bug, exp in IGNORE_TEST_CASES.iteritems(): 254 for bug, exp in IGNORE_TEST_CASES.iteritems():
244 if exp.match(testcase): 255 if exp.match(testcase):
245 return bug 256 return bug
246 return False 257 return False
247 258
259 def ignore_by_metadata(self, metadata):
260 for bug, source in IGNORE_SOURCES.iteritems():
261 if source in metadata['sources']:
262 return bug
263 return False
264
248 def ignore_by_output1(self, output): 265 def ignore_by_output1(self, output):
249 return self.ignore_by_output(output, self.arch1, self.config1) 266 return self.ignore_by_output(output, self.arch1, self.config1)
250 267
251 def ignore_by_output2(self, output): 268 def ignore_by_output2(self, output):
252 return self.ignore_by_output(output, self.arch2, self.config2) 269 return self.ignore_by_output(output, self.arch2, self.config2)
253 270
254 def ignore_by_output(self, output, arch, config): 271 def ignore_by_output(self, output, arch, config):
255 def check(mapping): 272 def check(mapping):
256 for bug, exp in mapping.iteritems(): 273 for bug, exp in mapping.iteritems():
257 if exp.search(output): 274 if exp.search(output):
258 return bug 275 return bug
259 return None 276 return None
260 bug = check(IGNORE_OUTPUT.get('', {})) 277 bug = check(IGNORE_OUTPUT.get('', {}))
261 if bug: 278 if bug:
262 return bug 279 return bug
263 bug = check(IGNORE_OUTPUT.get(arch, {})) 280 bug = check(IGNORE_OUTPUT.get(arch, {}))
264 if bug: 281 if bug:
265 return bug 282 return bug
266 bug = check(IGNORE_OUTPUT.get(config, {})) 283 bug = check(IGNORE_OUTPUT.get(config, {}))
267 if bug: 284 if bug:
268 return bug 285 return bug
269 bug = check(IGNORE_OUTPUT.get('%s,%s' % (arch, config), {})) 286 bug = check(IGNORE_OUTPUT.get('%s,%s' % (arch, config), {}))
270 if bug: 287 if bug:
271 return bug 288 return bug
272 return None 289 return None
OLDNEW
« no previous file with comments | « tools/foozzie/v8_foozzie.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698