From ad4e688ff8e163bef56140fbb92eec273979e3c5 Mon Sep 17 00:00:00 2001 From: Swasti Shrivastava <37058682+swasti16@users.noreply.github.com> Date: Mon, 16 Oct 2023 22:23:51 +0530 Subject: [PATCH] Fix #10652: FP: misra-c2012-10.4 (char)'1' != (char) (#5556) --- addons/misra.py | 7 +++++++ addons/test/misra/misra-test.c | 6 ++++++ 2 files changed, 13 insertions(+) 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) {