@@ -1588,16 +1588,28 @@ def misra_2_4(self, dumpfile, cfg):
15881588
15891589 def misra_2_5 (self , dumpfile , cfg ):
15901590 used_macros = []
1591+ unused_macro = {}
15911592 for m in cfg .macro_usage :
15921593 used_macros .append (m .name )
1593- summary = []
15941594 for directive in cfg .directives :
1595- res = re .match (r'#define[ \t]+([a-zA-Z_][a-zA-Z_0-9]*).*' , directive .str )
1596- if res :
1597- macro_name = res .group (1 )
1598- summary .append ({'name' : macro_name , 'used' : (macro_name in used_macros ), 'file' : directive .file , 'line' : directive .linenr , 'column' : directive .column })
1599- if len (summary ) > 0 :
1600- cppcheckdata .reportSummary (dumpfile , 'MisraMacro' , summary )
1595+ res_define = re .match (r'#define[ \t]+([a-zA-Z_][a-zA-Z_0-9]*).*' , directive .str )
1596+ res_undef = re .match (r'#undef[ \t]+([a-zA-Z_][a-zA-Z_0-9]*).*' , directive .str )
1597+ if res_define :
1598+ macro_name = res_define .group (1 )
1599+ unused_macro [macro_name ] = {'name' : macro_name , 'used' : (macro_name in used_macros ),
1600+ 'file' : directive .file , 'line' : directive .linenr , 'column' : directive .column }
1601+ elif res_undef :
1602+ macro_name = res_undef .group (1 )
1603+ # assuming that if we have #undef, we also have #define somewhere
1604+ if macro_name in unused_macro :
1605+ unused_macro [macro_name ]['used' ] = True
1606+ else :
1607+ unused_macro [macro_name ] = {'name' : macro_name , 'used' : True , 'file' : directive .file ,
1608+ 'line' : directive .linenr , 'column' : directive .column }
1609+ used_macros .append (macro_name )
1610+
1611+ if unused_macro :
1612+ cppcheckdata .reportSummary (dumpfile , 'MisraMacro' , list (unused_macro .values ()))
16011613
16021614 def misra_2_7 (self , data ):
16031615 for func in data .functions :
0 commit comments