Index: tools/valgrind/memcheck/PRESUBMIT.py |
=================================================================== |
--- tools/valgrind/memcheck/PRESUBMIT.py (revision 59155) |
+++ tools/valgrind/memcheck/PRESUBMIT.py (working copy) |
@@ -9,7 +9,12 @@ |
def CheckChange(input_api, output_api): |
"""Checks the memcheck suppressions files for bad data.""" |
+ suppressions = {} |
errors = [] |
+ # skip_next_line has 3 possible values: |
+ # - False: don't skip the next line. |
+ # - 'skip_suppression_name': the next line is a suppression name, skip. |
+ # - 'skip_param': the next line is a system call parameter error, skip. |
skip_next_line = False |
func_re = input_api.re.compile('[a-z_.]+\(.+\)$') |
for f, line_num, line in input_api.RightHandSideLines(lambda x: |
@@ -19,11 +24,23 @@ |
continue |
if skip_next_line: |
+ if skip_next_line == 'skip_suppression_name': |
+ if suppressions.has_key(line): |
+ errors.append('suppression with name "%s" at %s line %s has already ' |
+ 'been defined at line %s' % (line, f.LocalPath(), |
+ line_num, |
+ suppressions[line][1])) |
+ else: |
+ suppressions[line] = (f, line_num) |
skip_next_line = False |
continue |
- if line == '{' or line == "Memcheck:Param": |
- skip_next_line = True |
+ if line == '{': |
+ skip_next_line = 'skip_suppression_name' |
continue |
+ if line == "Memcheck:Param": |
+ skip_next_line = 'skip_param' |
+ continue |
+ |
if (line.startswith('fun:') or line.startswith('obj:') or |
line.startswith('Memcheck:') or line == '}' or |
line == '...'): |