Fix #10747: FP: misra-c2012-8.6 (#5601)

This commit is contained in:
Swasti Shrivastava 2023-10-30 00:09:36 +05:30 committed by GitHub
parent 18373bc64b
commit 915b4b6c5a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 8 deletions

View File

@ -4630,6 +4630,9 @@ class MisraChecker:
def is_different_location(loc1, loc2): def is_different_location(loc1, loc2):
return loc1['file'] != loc2['file'] or loc1['line'] != loc2['line'] return loc1['file'] != loc2['file'] or loc1['line'] != loc2['line']
def is_different_file(loc1, loc2):
return loc1['file'] != loc2['file']
try: try:
for filename in ctu_info_files: for filename in ctu_info_files:
for line in open(filename, 'rt'): for line in open(filename, 'rt'):
@ -4676,7 +4679,7 @@ class MisraChecker:
all_macro_info[key] = new_macro all_macro_info[key] = new_macro
if summary_type == 'MisraExternalIdentifiers': if summary_type == 'MisraExternalIdentifiers':
for s in summary_data: for s in sorted(summary_data, key=lambda d: "%s %s %s" %(d['file'],d['line'], d['column'] )):
is_declaration = s['decl'] is_declaration = s['decl']
if is_declaration: if is_declaration:
all_external_identifiers = all_external_identifiers_decl all_external_identifiers = all_external_identifiers_decl
@ -4684,10 +4687,13 @@ class MisraChecker:
all_external_identifiers = all_external_identifiers_def all_external_identifiers = all_external_identifiers_def
name = s['name'] name = s['name']
if name in all_external_identifiers and is_different_location(s, all_external_identifiers[name]): if name in all_external_identifiers:
num = 5 if is_declaration else 6 if is_declaration and is_different_location(s, all_external_identifiers[name]):
self.reportError(Location(s), 8, num) self.reportError(Location(s), 8, 5)
self.reportError(Location(all_external_identifiers[name]), 8, num) self.reportError(Location(all_external_identifiers[name]), 8, 5)
elif is_different_file(s, all_external_identifiers[name]):
self.reportError(Location(s), 8, 6)
self.reportError(Location(all_external_identifiers[name]), 8, 6)
all_external_identifiers[name] = s all_external_identifiers[name] = s
if summary_type == 'MisraInternalIdentifiers': if summary_type == 'MisraInternalIdentifiers':

View File

@ -1,5 +1,5 @@
// Test with command: // Test with command:
// ./cppcheck --enable=information --addon=misra --inline-suppr addons/test/misra/misra-ctu-*-test.c // ./cppcheck --enable=information --enable=style --addon=misra --inline-suppr addons/test/misra/misra-ctu-*-test.c
#include "misra-ctu-test.h" #include "misra-ctu-test.h"

View File

@ -1,5 +1,5 @@
// Test with command: // Test with command:
// ./cppcheck --enable=information --addon=misra --inline-suppr addons/test/misra/misra-ctu-*-test.c // ./cppcheck --enable=information --enable=style --addon=misra --inline-suppr addons/test/misra/misra-ctu-*-test.c
#include "misra-ctu-test.h" #include "misra-ctu-test.h"
@ -43,7 +43,11 @@ extern int misra_8_5;
// cppcheck-suppress misra-c2012-8.4 // cppcheck-suppress misra-c2012-8.4
// cppcheck-suppress misra-c2012-8.6 // cppcheck-suppress misra-c2012-8.6
int32_t misra_8_6 = 2; int32_t misra_8_6 = 2;
// cppcheck-suppress misra-c2012-8.4
int32_t misra_8_6_1;
// cppcheck-suppress misra-c2012-8.7
// cppcheck-suppress misra-c2012-8.4
int32_t misra_8_6_1 = 2;
// cppcheck-suppress misra-c2012-8.4 // cppcheck-suppress misra-c2012-8.4
// cppcheck-suppress misra-c2012-8.7 // cppcheck-suppress misra-c2012-8.7
void misra_8_7(void) {} void misra_8_7(void) {}