diff --git a/addons/cppcheckdata.py b/addons/cppcheckdata.py index e1462ff44..b1b4d5a9b 100644 --- a/addons/cppcheckdata.py +++ b/addons/cppcheckdata.py @@ -534,6 +534,11 @@ class CppcheckData: tok = Token(node) tok.file = files[int(node.get('fileIndex'))] self.rawTokens.append(tok) + for i in range(len(self.rawTokens)): + if i > 0: + self.rawTokens[i].previous = self.rawTokens[i-1] + if i + 1 < len(self.rawTokens): + self.rawTokens[i].next = self.rawTokens[i+1] # root is 'dumps' node, each config has its own 'dump' subnode. diff --git a/addons/misra-test.c b/addons/misra-test.c index 4a5692ff2..13c1310a5 100644 --- a/addons/misra-test.c +++ b/addons/misra-test.c @@ -1,6 +1,8 @@ // To test: // ~/cppcheck/cppcheck --dump misra-test.c && python misra.py -verify misra-test.c.dump +#include // 17.1 + typedef unsigned char u8; void misra_5_1() { @@ -172,3 +174,5 @@ void misra_16_7() { break; } } + + diff --git a/addons/misra.py b/addons/misra.py index 9095b186e..3aab91568 100644 --- a/addons/misra.py +++ b/addons/misra.py @@ -497,6 +497,11 @@ def misra_16_7(data): if simpleMatch(token, 'switch (') and isBoolExpression(token.next.astOperand2): reportError(token, 16, 7) +def misra_17_1(rawTokens): + for token in rawTokens: + if simpleMatch(token, '# include '): + reportError(token, 17, 1) + if '-verify' in sys.argv[1:]: VERIFY = True @@ -556,6 +561,8 @@ for arg in sys.argv[1:]: misra_16_5(cfg) misra_16_6(cfg) misra_16_7(cfg) + if cfgNumber == 1: + misra_17_1(data.rawTokens) if VERIFY: for expected in VERIFY_EXPECTED: