From 8de160a1637cd63151d135d0d13715a9f930fe94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 12 Sep 2021 09:12:47 +0200 Subject: [PATCH] Fixed #10447 (FP: misra-c2012-10.3) --- addons/misra.py | 7 ++++++- addons/test/misra/misra-test.c | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/misra.py b/addons/misra.py index 70212e109..a20bb46c3 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -445,7 +445,7 @@ def getEssentialTypeCategory(expr): return "enum<" + expr.valueType.typeScope.className + ">" if expr.variable: typeToken = expr.variable.typeStartToken - while typeToken: + while typeToken and typeToken.isName: if typeToken.str == 'char' and not typeToken.isSigned and not typeToken.isUnsigned: return 'char' if typeToken.valueType: @@ -506,6 +506,11 @@ def getEssentialType(expr): return '%s %s' % (expr.valueType.sign, expr.valueType.type) if expr.variable or isCast(expr): + typeToken = expr.variable.typeStartToken if expr.variable else expr.next + while typeToken and typeToken.isName: + if typeToken.str == 'char' and not typeToken.isSigned and not typeToken.isUnsigned: + return 'char' + typeToken = typeToken.next if expr.valueType: if expr.valueType.type == 'bool': return 'bool' diff --git a/addons/test/misra/misra-test.c b/addons/test/misra/misra-test.c index 7ec32d36e..a21e71e9d 100644 --- a/addons/test/misra/misra-test.c +++ b/addons/test/misra/misra-test.c @@ -678,6 +678,7 @@ static void misra_10_3(uint32_t u32a, uint32_t u32b) { res = (uint16_t)(2U + 3U); // 10.3 10.8 res = (uint16_t)2U + (uint16_t)3U; res = 0.1f; // 10.3 + const char c = '0'; // no-warning } static void misra_10_4(u32 x, s32 y) {