From 00dab1d1da9af3c1eb146afa7a45a99ffe2fc899 Mon Sep 17 00:00:00 2001 From: "Conrado P. L. Gouvea" Date: Fri, 30 Aug 2019 16:35:34 -0300 Subject: [PATCH] misra: fix rule 5.4 false positive when macro is defined 'twice' inside #if/#else --- addons/misra.py | 3 ++- addons/test/misra/misra-test.c | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/addons/misra.py b/addons/misra.py index 586f8139e64..32e8acced41 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -880,7 +880,8 @@ def misra_5_4(self, data): for x, m_var1 in enumerate(macro): for y, m_var2 in enumerate(macro): - if x < y and macro[m_var1]["name"][:num_sign_chars] == macro[m_var2]["name"][:num_sign_chars]: + if x < y and macro[m_var1]["name"] != macro[m_var2]["name"] and \ + macro[m_var1]["name"][:num_sign_chars] == macro[m_var2]["name"][:num_sign_chars]: if m_var1.linenr > m_var2.linenr: self.reportError(m_var1, 5, 4) else: diff --git a/addons/test/misra/misra-test.c b/addons/test/misra/misra-test.c index 38d3d3aa24c..00ddfac0e3e 100644 --- a/addons/test/misra/misra-test.c +++ b/addons/test/misra/misra-test.c @@ -104,6 +104,11 @@ void misra_5_3_enum_hidesfunction_31y(void) {} //5.3 #define misra_5_4_macro_hides_macro__31y 2 //5.4 #define m1(misra_5_4_param_hides_macro__31y) 1 //5.4 #define m2(misra_5_4_param_hides_param__31x,misra_5_4_param_hides_param__31y) 1 //5.4 +#ifdef misra_5_4_macro_hides_macro__31x +#define misra_5_4_macro 1 // no warning +#else +#define misra_5_4_macro 2 // no warning +#endif #define misra_5_5_var_hides_macro____31x 1 #define misra_5_5_functionhides_macro31x 1