Misra: Write 12.3 warnings in structs/classes

This commit is contained in:
Daniel Marjamäki 2020-09-08 09:29:57 +02:00
parent c0ef640304
commit 6e4085f3d8
2 changed files with 13 additions and 5 deletions

View File

@ -1640,13 +1640,21 @@ class MisraChecker:
def misra_12_3(self, data):
for token in data.tokenlist:
if token.scope.type in ('Class', 'Struct'):
continue
if token.str == ';' and (token.isSplittedVarDecl is True):
self.reportError(token, 12, 3)
if token.str == ',' and token.astParent and token.astParent.str == ';':
self.reportError(token, 12, 3)
if token.str == ',' and token.astParent is None:
if token.scope.type in ('Class', 'Struct'):
# Is this initlist..
tok = token
while tok and tok.str == ',':
tok = tok.next
if tok and tok.next and tok.isName and tok.next.str == '(':
tok = tok.next.link.next
if tok.str == '{':
# This comma is used in initlist, do not warn
continue
prev = token.previous
while prev:
if prev.str == ';':

View File

@ -393,14 +393,14 @@ enum misra_12_3_e1 { M123A1, M123B1, M123C1 };
enum misra_12_3_e2 { M123A2 = 3, M123B2 = 4, M123C2 };
typedef enum misra_12_3_e3 { M123A3 , M123B3, M123C3 } misra_12_3_e3_t;
typedef enum { M123A4 , M123B4, M123C4 } misra_12_3_e4_t;
struct misra_12_3_s1 { int a; int b; int c, d; };
struct misra_12_3_s1 { int a; int b; int c, d; }; // 12.3
static struct misra_12_3_s1 misra_12_3_s1_inst = {
3,
4, 5,
6, // no warning
};
typedef struct misra_12_3_s2 { int a; int b; int c, d; } misra_12_3_s2_t;
typedef struct { int a; int b; int c, d; } misra_12_3_s3_t;
typedef struct misra_12_3_s2 { int a; int b; int c, d; } misra_12_3_s2_t; // 12.3
typedef struct { int a; int b; int c, d; } misra_12_3_s3_t; // 12.3
void misra_12_3_fn1(int, int); static int misra_12_3_v5, misra_12_4_v6; // 12.3
void misra_12_3_fn2(int a, int b) // 2.7
{ int d, e; } // 12.3