diff --git a/addons/misra.py b/addons/misra.py index 59d6d336f..4f37d2041 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -495,6 +495,13 @@ def getEssentialTypeCategory(expr): return 'char' return expr.valueType.sign + if (expr.isCast and expr.str == "("): + castTok = expr.next + while castTok.isName or castTok.str == "*": + if castTok.str == 'char' and not castTok.isSigned and not castTok.isUnsigned: + return 'char' + castTok = castTok.next + if expr.valueType: return expr.valueType.sign return None diff --git a/addons/test/misra/misra-test.c b/addons/test/misra/misra-test.c index ac0ab32ea..279371d2a 100644 --- a/addons/test/misra/misra-test.c +++ b/addons/test/misra/misra-test.c @@ -724,6 +724,12 @@ static void misra_10_4(u32 x, s32 y) { if ('\0' == cmd.buf[0]) //no-warning { } + + // #10652 + char c; + if ((char)'1' == c) {} // no warning + if ((unsigned char)'1' == c) {} //10.4 + if ((signed char)'1' == c) {} //10.4 } static void misra_10_5(uint16_t x) {