From 2e9e3ed2f1be2e8b11a6140eb3b4c84edfdb1dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 11 Aug 2019 19:08:57 +0200 Subject: [PATCH] Fixed #8823 (false positive: MISRA rule 16.3) --- addons/misra.py | 8 ++++++-- addons/test/misra/misra-test.c | 17 +++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/addons/misra.py b/addons/misra.py index 0ca52d634..5d6e7d0e9 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -1519,8 +1519,12 @@ class MisraChecker: state = STATE_OK elif token.str == '}' and state == STATE_OK: # is this {} an unconditional block of code? - link = findRawLink(token) - if (link is None) or (link.previous is None) or (link.previous.str not in ':;{}'): + prev = findRawLink(token) + if prev: + prev = prev.previous + while prev and prev.str[:2] in ('//', '/*'): + prev = prev.previous + if (prev is None) or (prev.str not in ':;{}'): state = STATE_NONE elif token.str == 'case' or token.str == 'default': if state != STATE_OK: diff --git a/addons/test/misra/misra-test.c b/addons/test/misra/misra-test.c index fc50b6d77..38d3d3aa2 100644 --- a/addons/test/misra/misra-test.c +++ b/addons/test/misra/misra-test.c @@ -441,6 +441,23 @@ void misra_16_3() { case 12: default: break; } + + switch (x) { + case 1: // comment 1 + { + a = 1; + break; + } + case 2: // comment 2 + { + a = 2; + break; + } + default: + { + break; + } + } } void misra_16_4() {