From 1cd8454239523acbb944e1886a6c775e2eebdf32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Fri, 14 Apr 2017 13:07:48 +0200 Subject: [PATCH] Misra: Added rule 16.5 --- addons/misra-test.c | 15 ++++++++++++++- addons/misra.py | 17 +++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/addons/misra-test.c b/addons/misra-test.c index f53ca7552..561b65a15 100644 --- a/addons/misra-test.c +++ b/addons/misra-test.c @@ -144,4 +144,17 @@ void misra_16_4() { case 2: break; } -} \ No newline at end of file +} + +void misra_16_5() { + switch (x) { + case 1: + break; + default: // 16.5 + break; + case 2: + break; + } +} + + diff --git a/addons/misra.py b/addons/misra.py index 6d94cdc31..a35ea2e60 100644 --- a/addons/misra.py +++ b/addons/misra.py @@ -459,6 +459,22 @@ def misra_16_4(data): if tok and tok.str != 'default': reportError(token, 16, 4) +def misra_16_5(data): + for token in data.tokenlist: + if token.str != 'default': + continue + if token.previous and token.previous.str == '{': + continue + tok2 = token + while tok2: + if tok2.str in ['}', 'case']: + break + if tok2.str == '{': + tok2 = tok2.link + tok2 = tok2.next + if tok2 and tok2.str == 'case': + reportError(token, 16, 5) + if '-verify' in sys.argv[1:]: VERIFY = True @@ -514,6 +530,7 @@ for arg in sys.argv[1:]: if cfgNumber == 1: misra_16_3(data.rawTokens) misra_16_4(cfg) + misra_16_5(cfg) if VERIFY: for expected in VERIFY_EXPECTED: