Skip to content

Commit aa910d3

Browse files
committed
misra; implemented rule 8.5
1 parent 27bd543 commit aa910d3

4 files changed

Lines changed: 26 additions & 10 deletions

File tree

addons/cppcheckdata.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,16 +1217,18 @@ def ArgumentParser():
12171217

12181218
def get_files(args):
12191219
"""Return dump_files, ctu_info_files"""
1220-
dump_files = args.dumpfile
1221-
ctu_info_files = []
1220+
all_files = args.dumpfile
12221221
if args.file_list:
12231222
with open(args.file_list, 'rt') as f:
12241223
for line in f.readlines():
1225-
line = line.rstrip()
1226-
if line.endswith('.ctu-info'):
1227-
ctu_info_files.append(line)
1228-
else:
1229-
dump_files.append(line)
1224+
all_files.append(line.rstrip())
1225+
dump_files = []
1226+
ctu_info_files = []
1227+
for f in all_files:
1228+
if f.endswith('.ctu-info'):
1229+
ctu_info_files.append(f)
1230+
else:
1231+
dump_files.append(f)
12301232
return dump_files, ctu_info_files
12311233

12321234

addons/misra.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3611,6 +3611,9 @@ def analyse_ctu_info(self, ctu_info_files):
36113611

36123612
from cppcheckdata import Location
36133613

3614+
def is_different_location(loc1, loc2):
3615+
return loc1['file'] != loc2['file'] or loc1['line'] != loc2['line']
3616+
36143617
for filename in ctu_info_files:
36153618
for line in open(filename, 'rt'):
36163619
if not line.startswith('{'):
@@ -3626,7 +3629,7 @@ def analyse_ctu_info(self, ctu_info_files):
36263629
for old_typedef_info in all_typedef_info:
36273630
if old_typedef_info['name'] == new_typedef_info['name']:
36283631
found = True
3629-
if old_typedef_info['file'] != new_typedef_info['file'] or old_typedef_info['line'] != new_typedef_info['line']:
3632+
if is_different_location(old_typedef_info, new_typedef_info):
36303633
self.reportError(Location(old_typedef_info), 5, 6)
36313634
self.reportError(Location(new_typedef_info), 5, 6)
36323635
else:
@@ -3642,7 +3645,7 @@ def analyse_ctu_info(self, ctu_info_files):
36423645
for old_tagname_info in all_tagname_info:
36433646
if old_tagname_info['name'] == new_tagname_info['name']:
36443647
found = True
3645-
if old_tagname_info['file'] != new_tagname_info['file'] or old_tagname_info['line'] != new_tagname_info['line']:
3648+
if is_different_location(old_tagname_info, new_tagname_info):
36463649
self.reportError(Location(old_tagname_info), 5, 7)
36473650
self.reportError(Location(new_tagname_info), 5, 7)
36483651
else:
@@ -3664,8 +3667,11 @@ def analyse_ctu_info(self, ctu_info_files):
36643667
if not found:
36653668
all_macro_info.append(new_macro)
36663669

3667-
if summary_type == 'MisraGlobalIdentifiers':
3670+
if summary_type == 'MisraExternalIdentifiers':
36683671
for s in summary_data:
3672+
if s['name'] in all_external_identifiers and is_different_location(s, all_external_identifiers[s['name']]):
3673+
self.reportError(Location(s), 8, 5)
3674+
self.reportError(Location(all_external_identifiers[s['name']]), 8, 5)
36693675
all_external_identifiers[s['name']] = s
36703676

36713677
if summary_type == 'MisraInternalIdentifiers':

addons/test/misra/misra-ctu-1-test.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@ static void misra_5_8_f(void) {}
2929
static int misra_5_9_count;
3030
// cppcheck-suppress misra-c2012-5.9
3131
static void misra_5_8_foo(void) {}
32+
33+
// cppcheck-suppress misra-c2012-8.4
34+
// cppcheck-suppress misra-c2012-8.5
35+
extern int misra_8_5;

addons/test/misra/misra-ctu-2-test.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,7 @@ void misra_5_8_f(void) {
3030
static int misra_5_9_count;
3131
// cppcheck-suppress misra-c2012-5.9
3232
static void misra_5_8_foo(void) {}
33+
34+
// cppcheck-suppress misra-c2012-8.4
35+
// cppcheck-suppress misra-c2012-8.5
36+
extern int misra_8_5;

0 commit comments

Comments
 (0)