Misra: Add rule 11.8

This commit is contained in:
Daniel Marjamäki 2017-04-15 21:55:07 +02:00
parent dd8b96f4c8
commit b59d46091e
3 changed files with 24 additions and 1 deletions

View File

@ -73,6 +73,7 @@ class Token:
function If this token points at a function call, this attribute has the Function
information. See the Function class.
values Possible values of token
valueType type information
typeScope type scope (token->type()->classScope)
astParent ast parent
astOperand1 ast operand1
@ -121,6 +122,7 @@ class Token:
function = None
valuesId = None
values = None
valueType = None
typeScopeId = None
typeScope = None
@ -179,6 +181,7 @@ class Token:
self.function = None
self.valuesId = element.get('values')
self.values = None
self.valueType = element.get('valueType')
self.typeScopeId = element.get('type-scope')
self.typeScope = None
self.astParentId = element.get('astParent')

View File

@ -23,6 +23,10 @@ void misra_7_3() {
int x = 12lu; // 7.3
}
char * misra_11_8(const char *str) {
return (char *)str; // 11.8
}
#define MISRA_11_9 ((void*)0) // 11.9
void misra_12_1() {

View File

@ -96,6 +96,9 @@ def bitsOfEssentialType(expr):
return INT_BIT
return 0
def isCast(expr):
return expr and expr.str == '(' and expr.astOperand1 == expr.link.next
def isFunctionCall(expr):
if not expr:
return False
@ -263,6 +266,18 @@ def misra_12_1_sizeof(rawTokens):
else:
state = 0
def misra_11_8(data):
for token in data.tokenlist:
if not isCast(token):
continue
if not token.valueType or not token.astOperand1.valueType:
continue
if token.valueType.startswith('const') or not token.astOperand1.valueType.startswith('const'):
continue
if token.valueType.find('*')<0 or token.astOperand1.valueType.find('*')<0:
continue
reportError(token, 11, 8)
def misra_11_9(data):
for directive in data.directives:
res1 = re.match(r'#define ([A-Za-z_][A-Za-z_0-9]*) (.*)', directive.str)
@ -716,7 +731,8 @@ for arg in sys.argv[1:]:
if cfgNumber == 1:
misra_7_1(data.rawTokens)
misra_7_3(data.rawTokens)
misra_11_9(cfg);
misra_11_8(cfg)
misra_11_9(cfg)
if cfgNumber == 1:
misra_12_1_sizeof(data.rawTokens)
misra_12_1(cfg)