@@ -446,6 +446,8 @@ def getEssentialTypeCategory(expr):
446446 if expr .variable :
447447 typeToken = expr .variable .typeStartToken
448448 while typeToken :
449+ if typeToken .str == 'char' and not typeToken .isSigned and not typeToken .isUnsigned :
450+ return 'char'
449451 if typeToken .valueType :
450452 if typeToken .valueType .type == 'bool' :
451453 return typeToken .valueType .type
@@ -510,6 +512,8 @@ def getEssentialType(expr):
510512 if expr .valueType .isFloat ():
511513 return expr .valueType .type
512514 if expr .valueType .isIntegral ():
515+ if (expr .valueType .sign is None ) and expr .valueType .type == 'char' :
516+ return 'char'
513517 return '%s %s' % (expr .valueType .sign , expr .valueType .type )
514518
515519 elif expr .isNumber :
@@ -2082,11 +2086,9 @@ def misra_10_1(self, data):
20822086 elif not isUnsignedType (e2 ) and not token .astOperand2 .isNumber :
20832087 self .reportError (token , 10 , 1 )
20842088 elif token .str in ('~' , '&' , '|' , '^' ):
2085- def _is_char (essential_type ):
2086- return essential_type and (essential_type .split (' ' )[- 1 ] == 'char' )
20872089 e1_et = getEssentialType (token .astOperand1 )
20882090 e2_et = getEssentialType (token .astOperand2 )
2089- if _is_char ( e1_et ) and _is_char ( e2_et ) :
2091+ if e1_et == 'char' or e2_et == 'char' :
20902092 self .reportError (token , 10 , 1 )
20912093
20922094 def misra_10_2 (self , data ):
0 commit comments