Misra: Add Rule 14.1
This commit is contained in:
parent
0c26d9e470
commit
466bbdcf6f
|
@ -60,6 +60,10 @@ void misra_13_6() {
|
||||||
return sizeof(x++); // 13.6
|
return sizeof(x++); // 13.6
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void misra_14_1() {
|
||||||
|
for (float f=0.1f; f<1.0f; f += 0.1f){} // 14.1
|
||||||
|
}
|
||||||
|
|
||||||
void misra_14_4() {
|
void misra_14_4() {
|
||||||
if (x+4){} // 14.4
|
if (x+4){} // 14.4
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,16 @@ def countSideEffects(expr):
|
||||||
ret = 1
|
ret = 1
|
||||||
return ret + countSideEffects(expr.astOperand1) + countSideEffects(expr.astOperand2)
|
return ret + countSideEffects(expr.astOperand1) + countSideEffects(expr.astOperand2)
|
||||||
|
|
||||||
|
def hasFloatComparison(expr):
|
||||||
|
if not expr:
|
||||||
|
return False
|
||||||
|
if expr.isLogicalOp:
|
||||||
|
return hasFloatComparison(expr.astOperand1) or hasFloatComparison(expr.astOperand2)
|
||||||
|
if expr.isComparisonOp:
|
||||||
|
# TODO: Use ValueType
|
||||||
|
return cppcheckdata.astIsFloat(expr.astOperand1) or cppcheckdata.astIsFloat(expr.astOperand2)
|
||||||
|
return False
|
||||||
|
|
||||||
def hasSideEffectsRecursive(expr):
|
def hasSideEffectsRecursive(expr):
|
||||||
if not expr:
|
if not expr:
|
||||||
return False
|
return False
|
||||||
|
@ -273,6 +283,24 @@ def misra_13_6(data):
|
||||||
if token.str == 'sizeof' and hasSideEffectsRecursive(token.next):
|
if token.str == 'sizeof' and hasSideEffectsRecursive(token.next):
|
||||||
reportError(token, 13, 6)
|
reportError(token, 13, 6)
|
||||||
|
|
||||||
|
def misra_14_1(data):
|
||||||
|
for token in data.tokenlist:
|
||||||
|
if token.str != 'for':
|
||||||
|
continue
|
||||||
|
lpar = token.next
|
||||||
|
if not lpar or lpar.str != '(':
|
||||||
|
continue
|
||||||
|
if not lpar.astOperand2 or lpar.astOperand2.str != ';':
|
||||||
|
continue
|
||||||
|
if not lpar.astOperand2.astOperand2 or lpar.astOperand2.astOperand2.str != ';':
|
||||||
|
continue
|
||||||
|
expr1 = lpar.astOperand2.astOperand1
|
||||||
|
expr2 = lpar.astOperand2.astOperand2.astOperand1
|
||||||
|
expr3 = lpar.astOperand2.astOperand2.astOperand2
|
||||||
|
if hasFloatComparison(expr2):
|
||||||
|
reportError(token, 14, 1)
|
||||||
|
|
||||||
|
|
||||||
def misra_14_4(data):
|
def misra_14_4(data):
|
||||||
for token in data.tokenlist:
|
for token in data.tokenlist:
|
||||||
if token.str != '(':
|
if token.str != '(':
|
||||||
|
@ -314,5 +342,6 @@ for arg in sys.argv[1:]:
|
||||||
misra_13_4(cfg)
|
misra_13_4(cfg)
|
||||||
misra_13_5(cfg)
|
misra_13_5(cfg)
|
||||||
misra_13_6(cfg)
|
misra_13_6(cfg)
|
||||||
|
misra_14_1(cfg)
|
||||||
misra_14_4(cfg)
|
misra_14_4(cfg)
|
||||||
misra_15_1(cfg)
|
misra_15_1(cfg)
|
||||||
|
|
Loading…
Reference in New Issue