From 3740c571600b14ef55d512ee71275a3265709aaa Mon Sep 17 00:00:00 2001 From: Conrado Gouvea Date: Sat, 31 Aug 2019 02:53:16 -0300 Subject: [PATCH] misra: fix rule 5.4 false positive when macro is defined 'twice' inside #if/#else (#2125) --- 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 586f8139e..32e8acced 100755 --- a/addons/misra.py +++ b/addons/misra.py @@ -880,7 +880,8 @@ class MisraChecker: 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 38d3d3aa2..00ddfac0e 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