Fixed #10583 (False positive: misra-15.6)
This commit is contained in:
parent
88042773ce
commit
4f9a563570
|
@ -2832,14 +2832,41 @@ class MisraChecker:
|
||||||
state = 0
|
state = 0
|
||||||
indent = 0
|
indent = 0
|
||||||
tok1 = None
|
tok1 = None
|
||||||
|
def tokAt(tok,i):
|
||||||
|
while i < 0 and tok:
|
||||||
|
tok = tok.previous
|
||||||
|
if tok.str.startswith('//') or tok.str.startswith('/*'):
|
||||||
|
continue
|
||||||
|
i += 1
|
||||||
|
while i > 0 and tok:
|
||||||
|
tok = tok.next
|
||||||
|
if tok.str.startswith('//') or tok.str.startswith('/*'):
|
||||||
|
continue
|
||||||
|
i -= 1
|
||||||
|
return tok
|
||||||
|
|
||||||
|
def strtokens(tok, i1, i2):
|
||||||
|
tok1 = tokAt(tok, i1)
|
||||||
|
tok2 = tokAt(tok, i2)
|
||||||
|
tok = tok1
|
||||||
|
s = ''
|
||||||
|
while tok != tok2:
|
||||||
|
if tok.str.startswith('//') or tok.str.startswith('/*'):
|
||||||
|
tok = tok.next
|
||||||
|
continue
|
||||||
|
s += ' ' + tok.str
|
||||||
|
tok = tok.next
|
||||||
|
s += ' ' + tok.str
|
||||||
|
return s[1:]
|
||||||
|
|
||||||
for token in rawTokens:
|
for token in rawTokens:
|
||||||
if token.str in ['if', 'for', 'while']:
|
if token.str in ['if', 'for', 'while']:
|
||||||
if simpleMatch(token.previous, '# if'):
|
if strtokens(token,-1,0) == '# if':
|
||||||
continue
|
continue
|
||||||
if simpleMatch(token.previous, "} while"):
|
if strtokens(token,-1,0) == "} while":
|
||||||
# is there a 'do { .. } while'?
|
# is there a 'do { .. } while'?
|
||||||
start = rawlink(token.previous)
|
start = rawlink(tokAt(token,-1))
|
||||||
if start and simpleMatch(start.previous, 'do {'):
|
if start and strtokens(start, -1, 0) == 'do {':
|
||||||
continue
|
continue
|
||||||
if state == 2:
|
if state == 2:
|
||||||
self.reportError(tok1, 15, 6)
|
self.reportError(tok1, 15, 6)
|
||||||
|
@ -2847,9 +2874,9 @@ class MisraChecker:
|
||||||
indent = 0
|
indent = 0
|
||||||
tok1 = token
|
tok1 = token
|
||||||
elif token.str == 'else':
|
elif token.str == 'else':
|
||||||
if simpleMatch(token.previous, '# else'):
|
if strtokens(token,-1,0) == '# else':
|
||||||
continue
|
continue
|
||||||
if simpleMatch(token, 'else if'):
|
if strtokens(token,0,1) == 'else if':
|
||||||
continue
|
continue
|
||||||
if state == 2:
|
if state == 2:
|
||||||
self.reportError(tok1, 15, 6)
|
self.reportError(tok1, 15, 6)
|
||||||
|
|
|
@ -1414,6 +1414,16 @@ static void misra_15_6(void) {
|
||||||
do {} while (x<0); // no-warning
|
do {} while (x<0); // no-warning
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void misra_15_6_fp(void)
|
||||||
|
{
|
||||||
|
uint8_t value = 0U;
|
||||||
|
do // Test
|
||||||
|
{
|
||||||
|
value++;
|
||||||
|
}
|
||||||
|
while (value < 2U);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(M_20_9) && M_20_9 > 1 // no-warning (#10380)
|
#if defined(M_20_9) && M_20_9 > 1 // no-warning (#10380)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue