| Index: testing/gmock/scripts/gmock_doctor.py
|
| diff --git a/testing/gmock/scripts/gmock_doctor.py b/testing/gmock/scripts/gmock_doctor.py
|
| old mode 100644
|
| new mode 100755
|
| index 40512fcd851e908263c8f9729f54b9c4fc5369e8..bc814ad99447fcdb8811a43a6a827e8537b10d36
|
| --- a/testing/gmock/scripts/gmock_doctor.py
|
| +++ b/testing/gmock/scripts/gmock_doctor.py
|
| @@ -186,8 +186,9 @@ def _NeedToReturnNothingDiagnoser(msg):
|
| """Diagnoses the NRN disease, given the error messages by gcc."""
|
|
|
| regex = (_FILE_LINE_RE + r'instantiated from here\n'
|
| - r'.*gmock-actions\.h.*error: return-statement with a value, '
|
| - r'in function returning \'void\'')
|
| + r'.*gmock-actions\.h.*error: instantiation of '
|
| + r'\'testing::internal::ReturnAction<R>::Impl<F>::value_\' '
|
| + r'as type \'void\'')
|
| diagnosis = """
|
| You are using an action that returns *something*, but it needs to return
|
| void. Please use a void-returning action instead.
|
| @@ -336,12 +337,14 @@ Did you forget to write
|
| def _NeedToUseReturnNullDiagnoser(msg):
|
| """Diagnoses the NRNULL disease, given the error messages by gcc."""
|
|
|
| - regex = (_FILE_LINE_RE + r'instantiated from here\n'
|
| - r'.*gmock-actions\.h.*error: invalid conversion from '
|
| - r'\'long int\' to \'(?P<type>.+\*)')
|
| + regex = ('instantiated from \'testing::internal::ReturnAction<R>'
|
| + '::operator testing::Action<Func>\(\) const.*\n' +
|
| + _FILE_LINE_RE + r'instantiated from here\n'
|
| + r'.*error: no matching function for call to \'implicit_cast\('
|
| + r'long int&\)')
|
| diagnosis = """
|
| You are probably calling Return(NULL) and the compiler isn't sure how to turn
|
| -NULL into a %(type)s*. Use ReturnNull() instead.
|
| +NULL into the right type. Use ReturnNull() instead.
|
| Note: the line number may be off; please fix all instances of Return(NULL)."""
|
| return _GenericDiagnoser('NRNULL', 'Need to use ReturnNull',
|
| regex, diagnosis, msg)
|
| @@ -363,11 +366,17 @@ def _TypeInTemplatedBaseDiagnoser1(msg):
|
| type.
|
| """
|
|
|
| - regex = (r'In member function \'int .*\n' + _FILE_LINE_RE +
|
| - r'error: a function call cannot appear in a constant-expression')
|
| + gcc_4_3_1_regex = (
|
| + r'In member function \'int .*\n' + _FILE_LINE_RE +
|
| + r'error: a function call cannot appear in a constant-expression')
|
| + gcc_4_4_0_regex = (
|
| + r'error: a function call cannot appear in a constant-expression'
|
| + + _FILE_LINE_RE + r'error: template argument 1 is invalid\n')
|
| diagnosis = _TTB_DIAGNOSIS % {'type': 'Foo'}
|
| - return _GenericDiagnoser('TTB', 'Type in Template Base',
|
| - regex, diagnosis, msg)
|
| + return (list(_GenericDiagnoser('TTB', 'Type in Template Base',
|
| + gcc_4_3_1_regex, diagnosis, msg)) +
|
| + list(_GenericDiagnoser('TTB', 'Type in Template Base',
|
| + gcc_4_4_0_regex, diagnosis, msg)))
|
|
|
|
|
| def _TypeInTemplatedBaseDiagnoser2(msg):
|
| @@ -377,8 +386,7 @@ def _TypeInTemplatedBaseDiagnoser2(msg):
|
| parameter type.
|
| """
|
|
|
| - regex = (r'In member function \'int .*\n'
|
| - + _FILE_LINE_RE +
|
| + regex = (_FILE_LINE_RE +
|
| r'error: \'(?P<type>.+)\' was not declared in this scope\n'
|
| r'.*error: template argument 1 is invalid\n')
|
| return _GenericDiagnoser('TTB', 'Type in Template Base',
|
| @@ -455,9 +463,13 @@ _DIAGNOSERS = [
|
| def Diagnose(msg):
|
| """Generates all possible diagnoses given the gcc error message."""
|
|
|
| + diagnoses = []
|
| for diagnoser in _DIAGNOSERS:
|
| - for diagnosis in diagnoser(msg):
|
| - yield '[%s - %s]\n%s' % diagnosis
|
| + for diag in diagnoser(msg):
|
| + diagnosis = '[%s - %s]\n%s' % diag
|
| + if not diagnosis in diagnoses:
|
| + diagnoses.append(diagnosis)
|
| + return diagnoses
|
|
|
|
|
| def main():
|
| @@ -471,7 +483,7 @@ def main():
|
| print 'Waiting for compiler errors on stdin . . .'
|
|
|
| msg = sys.stdin.read().strip()
|
| - diagnoses = list(Diagnose(msg))
|
| + diagnoses = Diagnose(msg)
|
| count = len(diagnoses)
|
| if not count:
|
| print '\nGcc complained:'
|
|
|