I also changed the comment header to run tests on misra-test-avr8.c because I thought that was the intention to use it like misra-test.c; if not, I can revert.
This commit is contained in:
parent
5bb4c6f5bc
commit
5a136c3f38
|
@ -466,9 +466,15 @@ def getEssentialTypeCategory(expr):
|
||||||
return expr.valueType.sign
|
return expr.valueType.sign
|
||||||
if expr.valueType and expr.valueType.typeScope and expr.valueType.typeScope.className:
|
if expr.valueType and expr.valueType.typeScope and expr.valueType.typeScope.className:
|
||||||
return "enum<" + expr.valueType.typeScope.className + ">"
|
return "enum<" + expr.valueType.typeScope.className + ">"
|
||||||
|
# Unwrap membership, dereferences and array indexing
|
||||||
vartok = expr
|
vartok = expr
|
||||||
while simpleMatch(vartok, '[') or (vartok and vartok.str == '*' and vartok.astOperand2 is None):
|
while True:
|
||||||
vartok = vartok.astOperand1
|
if simpleMatch(vartok, '[') or (vartok and vartok.str == '*' and vartok.astOperand2 is None):
|
||||||
|
vartok = vartok.astOperand1
|
||||||
|
elif simpleMatch(vartok, '.'):
|
||||||
|
vartok = vartok.astOperand2
|
||||||
|
else:
|
||||||
|
break
|
||||||
if vartok and vartok.variable:
|
if vartok and vartok.variable:
|
||||||
typeToken = vartok.variable.typeStartToken
|
typeToken = vartok.variable.typeStartToken
|
||||||
while typeToken and typeToken.isName:
|
while typeToken and typeToken.isName:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// To test:
|
// To test:
|
||||||
// ~/cppcheck/cppcheck --addon=misra --platform=avr8 misra-test-avr8.c
|
// ~/cppcheck/cppcheck--dump -DDUMMY --suppress=uninitvar --inline-suppr misra/misra-test-avr8.c --std=c89 --platform=avr8 && python3 ../misra.py -verify misra/misra-test-avr8.c.dump
|
||||||
|
|
||||||
static void misra_10_4(void)
|
static void misra_10_4(void)
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,20 @@ static void misra_10_4(void)
|
||||||
const char buf[1] = {'f'};
|
const char buf[1] = {'f'};
|
||||||
const char c = '0';
|
const char c = '0';
|
||||||
x = buf[0] - c;
|
x = buf[0] - c;
|
||||||
|
|
||||||
|
const char buf[2] = {0};
|
||||||
|
x = 'a' == buf[0]; // no-warning
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int t;
|
||||||
|
char buf[2];
|
||||||
|
} foo_t;
|
||||||
|
const foo_t cmd = {0};
|
||||||
|
x = 'b' == cmd.buf[0]; // no-warning
|
||||||
|
|
||||||
|
const foo_t * pcmd = &cmd;
|
||||||
|
x='c' == pcmd->buf[0]; // no-warning
|
||||||
|
(void)cmd.t;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void misra_12_2(void) {
|
static void misra_12_2(void) {
|
||||||
|
|
|
@ -709,6 +709,14 @@ static void misra_10_4(u32 x, s32 y) {
|
||||||
if ('0' == buf[x]) // no-warning
|
if ('0' == buf[x]) // no-warning
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const struct foo_s{
|
||||||
|
int t;
|
||||||
|
char buf[2];
|
||||||
|
} cmd = {0};
|
||||||
|
if ('\0' == cmd.buf[0]) //no-warning
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void misra_10_5(uint16_t x) {
|
static void misra_10_5(uint16_t x) {
|
||||||
|
|
Loading…
Reference in New Issue