cppcheck/addons/threadsafety.py

36 lines
1.2 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
#
# This script analyses Cppcheck dump files to locate threadsafety issues
# - warn about static local objects
#
import cppcheckdata
import sys
2017-08-15 21:44:21 +02:00
def reportError(token, severity, msg, id):
2019-04-14 08:54:53 +02:00
cppcheckdata.reportError(token, severity, msg, 'threadsafety', id)
2015-08-21 10:55:19 +02:00
def checkstatic(data):
2015-08-21 10:55:19 +02:00
for var in data.variables:
if var.isStatic and var.isLocal:
type = None
if var.isClass:
type = 'object'
else:
type = 'variable'
if var.isConst:
2018-05-14 13:11:45 +02:00
reportError(var.typeStartToken, 'warning', 'Local constant static ' + type + ' \'' + var.nameToken.str + '\', dangerous if it is initialized in parallel threads', 'threadsafety')
else:
reportError(var.typeStartToken, 'warning', 'Local static ' + type + ': ' + var.nameToken.str, 'threadsafety')
for arg in sys.argv[1:]:
if arg.startswith('-'):
continue
2015-08-21 10:55:19 +02:00
print('Checking ' + arg + '...')
data = cppcheckdata.parsedump(arg)
for cfg in data.configurations:
if len(data.configurations) > 1:
print('Checking ' + arg + ', config "' + cfg.name + '"...')
checkstatic(cfg)