misra; implement rule 10.7

This commit is contained in:
Daniel Marjamäki 2021-07-21 19:18:12 +02:00
parent fb8d6daf79
commit d2843b70ca
2 changed files with 36 additions and 0 deletions

View File

@ -2177,6 +2177,32 @@ class MisraChecker:
except ValueError:
pass
def misra_10_7(self, cfg):
for token in cfg.tokenlist:
if token.astOperand1 is None or token.astOperand2 is None:
continue
if not token.isArithmeticalOp:
continue
parent = token.astParent
if parent is None:
continue
if not parent.isArithmeticalOp:
if not parent.isAssignmentOp:
continue
if parent.str == '=':
continue
token_type = getEssentialType(token)
if token_type is None:
continue
sibling = parent.astOperand1 if (token == parent.astOperand2) else parent.astOperand2
sibling_type = getEssentialType(sibling)
if sibling_type is None:
continue
b1 = bitsOfEssentialType(token_type)
b2 = bitsOfEssentialType(sibling_type)
if b1 > 0 and b1 < b2:
self.reportError(token, 10, 7)
def misra_10_8(self, data):
for token in data.tokenlist:
if not isCast(token):
@ -3801,6 +3827,7 @@ class MisraChecker:
self.executeCheck(1004, self.misra_10_4, cfg)
self.executeCheck(1005, self.misra_10_5, cfg)
self.executeCheck(1006, self.misra_10_6, cfg)
self.executeCheck(1007, self.misra_10_7, cfg)
self.executeCheck(1008, self.misra_10_8, cfg)
self.executeCheck(1101, self.misra_11_1, cfg)
self.executeCheck(1102, self.misra_11_2, cfg)

View File

@ -704,6 +704,15 @@ static void misra_10_6_1(uint32_t *a, uint16_t b, uint16_t c)
*a = b + c ; // 10.6
}
static void misra_10_7(uint16_t u16a, uint16_t u16b) {
uint32_t u32a = 100u;
res = u32a * u16a + u16b; // 12.1 no-warning
res = (u32a * u16a) + u16b; // no-warning
res = u32a * ( ( uint32_t ) u16a + u16b ); // no-warning
res = u32a * (u16a + u16b); // 10.7
u32a *= u16a + u16b; // 10.7
}
static void misra_10_8(u8 x, s32 a, s32 b) {
y = (u16)x;
y = (u16)(x+x); // 10.8