Modified rule 5.1 along with test suite (#1231)

* Modified rule 5.1 along with test suite

* Modified variable name in misra-test.c

* Modified rule 5.1 along with test suite

* Changed variable name
This commit is contained in:
Swasti Shrivastava 2018-05-16 14:37:44 +05:30 committed by Daniel Marjamäki
parent fdc98e5665
commit 92fd7d9343
2 changed files with 45 additions and 31 deletions

View File

@ -420,9 +420,23 @@ def misra_4_1(rawTokens):
def misra_5_1(data): def misra_5_1(data):
for token in data.tokenlist: scopeVars = {}
if token.isName and len(token.str) > 31: for var in data.variables:
reportError(token, 5, 1) if var.isArgument:
continue
if var.nameToken.scope not in scopeVars:
scopeVars[var.nameToken.scope] = []
scopeVars[var.nameToken.scope].append(var)
for scope in scopeVars:
for i, variable1 in enumerate(scopeVars[scope]):
for variable2 in scopeVars[scope][i + 1:]:
if (variable1.isExtern and variable2.isExtern and
variable1.nameToken.str[:31] == variable2.nameToken.str[:31] and
variable1.Id != variable2.Id):
if int(variable1.nameToken.linenr) > int(variable2.nameToken.linenr):
reportError(variable1.nameToken, 5, 1)
else:
reportError(variable2.nameToken, 5, 1)
def misra_5_2(data): def misra_5_2(data):
scopeVars = {} scopeVars = {}
@ -444,6 +458,8 @@ def misra_5_2(data):
for variable2 in scopeVars[scope]["varlist"][i + 1:]: for variable2 in scopeVars[scope]["varlist"][i + 1:]:
if variable1.isArgument and variable2.isArgument: if variable1.isArgument and variable2.isArgument:
continue continue
if variable1.isExtern and variable2.isExtern:
continue
if (variable1.nameToken.str[:31] == variable2.nameToken.str[:31] and if (variable1.nameToken.str[:31] == variable2.nameToken.str[:31] and
variable1.Id != variable2.Id): variable1.Id != variable2.Id):
if int(variable1.nameToken.linenr) > int(variable2.nameToken.linenr): if int(variable1.nameToken.linenr) > int(variable2.nameToken.linenr):
@ -466,6 +482,8 @@ def misra_5_2(data):
else: else:
reportError(scopename2.bodyStart, 5, 2) reportError(scopename2.bodyStart, 5, 2)
def misra_5_3(data): def misra_5_3(data):
enum = [] enum = []
scopeVars = {} scopeVars = {}

View File

@ -14,14 +14,17 @@ typedef unsigned long long u64;
//// 3.1 //// 3.1
extern int n01_var_hides_var____________________________________________63x; extern int misra_5_1_extern_var_hides_var_x;
static int n01_var_hides_var____________________________________________63y;//5.2 extern int misra_5_1_extern_var_hides_var_y; //5.1
static int n02_function_hides_var_______________________________________63x;
void n02_function_hides_var_______________________________________63y(void) {}//5.2 extern int misra_5_2_var_hides_var______31x;
static int misra_5_2_var_hides_var______31y;//5.2
static int misra_5_2_function_hides_var_31x;
void misra_5_2_function_hides_var_31y(void) {}//5.2
void foo(void) void foo(void)
{ {
int i; int i;
switch(f1()) switch(misra_5_2_func1()) //16.4 16.6
{ {
case 1: case 1:
{ {
@ -29,35 +32,28 @@ void foo(void)
{ {
for(i = 0; i < 10; i++) for(i = 0; i < 10; i++)
{ {
if(f3()) if(misra_5_2_func3()) //14.4
{ {
int int misra_5_2_var_hides_var_1____31x;
n03_var_hides_var____________________________________________63x; int misra_5_2_var_hides_var_1____31y;//5.2
int
n03_var_hides_var____________________________________________63y;//5.2
} }
} }
} while(f2()); } while(misra_5_2_func2()); //14.4
} }
} }
} }
union n06_field_hides_field________________________________________63x { union misra_5_2_field_hides_field__63x { //19.2
int n04_field_hides_field________________________________________63x; int misra_5_2_field_hides_field__31x;
int n04_field_hides_field________________________________________63y;//5.2 int misra_5_2_field_hides_field__31y;//5.2
}; };
struct n06_field_hides_field________________________________________63y { //5.2 struct misra_5_2_field_hides_field__63y { //5.2
int n05_field_hides_field________________________________________63x; int misra_5_2_field_hides_field1_31x;
int n05_field_hides_field________________________________________63y;//5.2 int misra_5_2_field_hides_field1_31y;//5.2
}; };
const char *s41_1 = "\x41g"; // 4.1 const char *s41_1 = "\x41g"; // 4.1
const char *s41_2 = "\x41\x42"; const char *s41_2 = "\x41\x42";
void misra_5_1() {
int a123456789012345678901234567890; // no-warning
int a1234567890123456789012345678901; // 5.1 5.2
}
extern int misra_5_3_var_hides_var______31x; extern int misra_5_3_var_hides_var______31x;
void misra_5_3_var_hides_function_31x (void) {} void misra_5_3_var_hides_function_31x (void) {}
enum misra_5_3_Enum { enum misra_5_3_Enum {
@ -68,18 +64,18 @@ void misra_5_3_func1(void)
int misra_5_3_var_hides_var______31y; //5.3 int misra_5_3_var_hides_var______31y; //5.3
int misra_5_3_var_hides_function_31y; //5.3 int misra_5_3_var_hides_function_31y; //5.3
int misra_5_3_var_hidesenumconst_31y; //5.3 int misra_5_3_var_hidesenumconst_31y; //5.3
switch(misra_5_3_func2()) switch(misra_5_3_func2()) //16.4 16.6
{ {
case 1: case 1:
{ {
do do
{ {
int misra_5_3_var_hides_var_1____31x; int misra_5_3_var_hides_var_1____31x;
if(misra_5_3_func3()) if(misra_5_3_func3()) //14.4
{ {
int misra_5_3_var_hides_var_1____31y = 1; //5.3 int misra_5_3_var_hides_var_1____31y = 1; //5.3
} }
} while(misra_5_3_func2()); } while(misra_5_3_func2()); //14.4
} }
} }
} }
@ -105,17 +101,17 @@ int x;
}; };
void misra_5_5_func1() void misra_5_5_func1()
{ {
switch(misra_5_5_func2()) switch(misra_5_5_func2()) //16.4 16.6
{ {
case 1: case 1:
{ {
do do
{ {
if(misra_5_5_func3()) if(misra_5_5_func3()) //14.4
{ {
int misra_5_5_hides_macro________31y; //5.5 int misra_5_5_hides_macro________31y; //5.5
} }
} while(misra_5_5_func2()); } while(misra_5_5_func2()); //14.4
} }
} }
} }