From 12844703de54384752bd4d0213ab6256cab8245f Mon Sep 17 00:00:00 2001 From: Swasti Shrivastava <37058682+swasti16@users.noreply.github.com> Date: Mon, 30 Oct 2023 21:54:19 +0530 Subject: [PATCH] Fix #9488: MISRA addon: False positive for rule 10.6 in test for rule 10.1 (#5598) --- addons/misra.py | 3 +++ addons/test/misra/misra-test.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/addons/misra.py b/addons/misra.py index 9d95bc984..192147db5 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -2387,6 +2387,9 @@ class MisraChecker: e = getEssentialType(token.astOperand2) if not e: continue + if e == "char" and vt1.type == "int": + # When arithmetic operations are performed on char values, they are usually promoted to int + continue lhsbits = vt1.bits if vt1.bits else bitsOfEssentialType(vt1.type) if lhsbits > bitsOfEssentialType(e): self.reportError(token, 10, 6) diff --git a/addons/test/misra/misra-test.c b/addons/test/misra/misra-test.c index 4c4ed1124..ebce42587 100644 --- a/addons/test/misra/misra-test.c +++ b/addons/test/misra/misra-test.c @@ -749,7 +749,7 @@ static void misra_10_6(u8 x, char c1, char c2) { u16 y1 = x+x; // 10.6 u16 y2 = (0x100u - 0x80u); // rhs is not a composite expression because it's a constant expression u16 z = ~u8 x ;//10.6 - s32 i = c1 - c2; // 10.3 FIXME: False positive for 10.6 (this is compliant). Trac #9488 + s32 i = c1 - c2; // 10.3 struct misra_10_6_s s; s.a = x & 1U; // no-warning (#10487) }