Added rule 5.2 (#1212)
* Added rule 5.2 * updated 5.2 request-checks: true * Updated test suite for Rule 5.2
This commit is contained in:
parent
c266688784
commit
d934065d21
|
@ -424,6 +424,47 @@ def misra_5_1(data):
|
||||||
if token.isName and len(token.str) > 31:
|
if token.isName and len(token.str) > 31:
|
||||||
reportError(token, 5, 1)
|
reportError(token, 5, 1)
|
||||||
|
|
||||||
|
def misra_5_2(data):
|
||||||
|
scopeVars = {}
|
||||||
|
for var in data.variables:
|
||||||
|
if var.nameToken.scope not in scopeVars:
|
||||||
|
scopeVars.setdefault(var.nameToken.scope, {})["varlist"] = []
|
||||||
|
scopeVars.setdefault(var.nameToken.scope, {})["scopelist"] = []
|
||||||
|
scopeVars[var.nameToken.scope]["varlist"].append(var)
|
||||||
|
for scope in data.scopes:
|
||||||
|
if scope.nestedIn and scope.className:
|
||||||
|
if scope.nestedIn not in scopeVars:
|
||||||
|
scopeVars.setdefault(scope.nestedIn, {})["varlist"] = []
|
||||||
|
scopeVars.setdefault(scope.nestedIn, {})["scopelist"] = []
|
||||||
|
scopeVars[scope.nestedIn]["scopelist"].append(scope)
|
||||||
|
for scope in scopeVars:
|
||||||
|
if len(scopeVars[scope]["varlist"]) <= 1:
|
||||||
|
continue
|
||||||
|
for i, variable1 in enumerate(scopeVars[scope]["varlist"]):
|
||||||
|
for variable2 in scopeVars[scope]["varlist"][i + 1:]:
|
||||||
|
if variable1.isArgument and variable2.isArgument:
|
||||||
|
continue
|
||||||
|
if (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, 2)
|
||||||
|
else:
|
||||||
|
reportError(variable2.nameToken, 5, 2)
|
||||||
|
for innerscope in scopeVars[scope]["scopelist"]:
|
||||||
|
if (variable1.nameToken.str[:31] == innerscope.className[:31]):
|
||||||
|
if int(variable1.nameToken.linenr) > int(innerscope.bodyStart.linenr):
|
||||||
|
reportError(variable1.nameToken, 5, 2)
|
||||||
|
else:
|
||||||
|
reportError(innerscope.bodyStart, 5, 2)
|
||||||
|
if len(scopeVars[scope]["scopelist"]) <= 1:
|
||||||
|
continue
|
||||||
|
for i, scopename1 in enumerate(scopeVars[scope]["scopelist"]):
|
||||||
|
for scopename2 in scopeVars[scope]["scopelist"][i + 1:]:
|
||||||
|
if (scopename1.className[:31] == scopename2.className[:31]):
|
||||||
|
if int(scopename1.bodyStart.linenr) > int(scopename2.bodyStart.linenr):
|
||||||
|
reportError(scopename1.bodyStart, 5, 2)
|
||||||
|
else:
|
||||||
|
reportError(scopename2.bodyStart, 5, 2)
|
||||||
|
|
||||||
def misra_5_3(data):
|
def misra_5_3(data):
|
||||||
scopeVars = {}
|
scopeVars = {}
|
||||||
|
@ -1420,6 +1461,7 @@ for arg in sys.argv[1:]:
|
||||||
misra_3_1(data.rawTokens)
|
misra_3_1(data.rawTokens)
|
||||||
misra_4_1(data.rawTokens)
|
misra_4_1(data.rawTokens)
|
||||||
misra_5_1(cfg)
|
misra_5_1(cfg)
|
||||||
|
misra_5_2(cfg)
|
||||||
misra_5_3(cfg)
|
misra_5_3(cfg)
|
||||||
misra_5_4(cfg)
|
misra_5_4(cfg)
|
||||||
misra_5_5(cfg)
|
misra_5_5(cfg)
|
||||||
|
|
|
@ -14,12 +14,48 @@ typedef unsigned long long u64;
|
||||||
|
|
||||||
//// 3.1
|
//// 3.1
|
||||||
|
|
||||||
|
extern int n01_var_hides_var____________________________________________63x;
|
||||||
|
static int n01_var_hides_var____________________________________________63y;//5.2
|
||||||
|
static int n02_function_hides_var_______________________________________63x;
|
||||||
|
void n02_function_hides_var_______________________________________63y(void) {}//5.2
|
||||||
|
void foo(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
switch(f1())
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
for(i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
if(f3())
|
||||||
|
{
|
||||||
|
int
|
||||||
|
n03_var_hides_var____________________________________________63x;
|
||||||
|
int
|
||||||
|
n03_var_hides_var____________________________________________63y;//5.2
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while(f2());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
union n06_field_hides_field________________________________________63x {
|
||||||
|
int n04_field_hides_field________________________________________63x;
|
||||||
|
int n04_field_hides_field________________________________________63y;//5.2
|
||||||
|
};
|
||||||
|
struct n06_field_hides_field________________________________________63y { //5.2
|
||||||
|
int n05_field_hides_field________________________________________63x;
|
||||||
|
int n05_field_hides_field________________________________________63y;//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() {
|
void misra_5_1() {
|
||||||
int a123456789012345678901234567890; // no-warning
|
int a123456789012345678901234567890; // no-warning
|
||||||
int a1234567890123456789012345678901; // 5.1
|
int a1234567890123456789012345678901; // 5.1 ,5.2
|
||||||
}
|
}
|
||||||
|
|
||||||
void misra_5_3() {
|
void misra_5_3() {
|
||||||
|
@ -41,7 +77,7 @@ void misra_7_1() {
|
||||||
|
|
||||||
void misra_7_3() {
|
void misra_7_3() {
|
||||||
int x = 12l; // 7.3
|
int x = 12l; // 7.3
|
||||||
int x = 12lu; // 7.3
|
int x = 12lu; // 7.3, 5.2
|
||||||
}
|
}
|
||||||
|
|
||||||
extern int a811[]; // 8.11
|
extern int a811[]; // 8.11
|
||||||
|
|
Loading…
Reference in New Issue