summaryrefslogtreecommitdiff
path: root/utils/analyzer
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2018-09-27 01:10:59 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2018-09-27 01:10:59 +0000
commit0bf92b1fff32383c1ab0485faf473cf76dce53a3 (patch)
tree9db8fd2ee48e3e45172b1b0f8eeef08cc6770fbf /utils/analyzer
parentf2c74bbcc07f715afbdbee0a9be4c6e4d2b1b6f6 (diff)
downloadclang-0bf92b1fff32383c1ab0485faf473cf76dce53a3.tar.gz
[analyzer] [testing] Pass through an extra argument for specifying extra analyzer options
Differential Revision: https://reviews.llvm.org/D52585 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@343158 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'utils/analyzer')
-rwxr-xr-xutils/analyzer/SATestBuild.py38
1 files changed, 22 insertions, 16 deletions
diff --git a/utils/analyzer/SATestBuild.py b/utils/analyzer/SATestBuild.py
index ea95ee289e..3c886a7d6a 100755
--- a/utils/analyzer/SATestBuild.py
+++ b/utils/analyzer/SATestBuild.py
@@ -255,7 +255,7 @@ def applyPatch(Dir, PBuildLogFile):
sys.exit(1)
-def runScanBuild(Dir, SBOutputDir, PBuildLogFile):
+def runScanBuild(Args, Dir, SBOutputDir, PBuildLogFile):
"""
Build the project with scan-build by reading in the commands and
prefixing them with the scan-build options.
@@ -281,9 +281,11 @@ def runScanBuild(Dir, SBOutputDir, PBuildLogFile):
("stable-report-filename", "true"),
("serialize-stats", "true"),
]
-
- SBOptions += "-analyzer-config '%s' " % (
- ",".join("%s=%s" % (key, value) for (key, value) in AnalyzerConfig))
+ AnalyzerConfigSerialized = ",".join(
+ "%s=%s" % (key, value) for (key, value) in AnalyzerConfig)
+ if Args.extra_args:
+ AnalyzerConfigSerialized += "," + Args.extra_args
+ SBOptions += "-analyzer-config '%s' " % AnalyzerConfigSerialized
# Always use ccc-analyze to ensure that we can locate the failures
# directory.
@@ -407,7 +409,7 @@ def removeLogFile(SBOutputDir):
check_call(RmCommand, shell=True)
-def buildProject(Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild):
+def buildProject(Args, Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild):
TBegin = time.time()
BuildLogPath = getBuildLogPath(SBOutputDir)
@@ -431,7 +433,7 @@ def buildProject(Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild):
if (ProjectBuildMode == 1):
downloadAndPatch(Dir, PBuildLogFile)
runCleanupScript(Dir, PBuildLogFile)
- runScanBuild(Dir, SBOutputDir, PBuildLogFile)
+ runScanBuild(Args, Dir, SBOutputDir, PBuildLogFile)
else:
runAnalyzePreprocessed(Dir, SBOutputDir, ProjectBuildMode)
@@ -628,12 +630,13 @@ def cleanupReferenceResults(SBOutputDir):
class TestProjectThread(threading.Thread):
- def __init__(self, TasksQueue, ResultsDiffer, FailureFlag):
+ def __init__(self, Args, TasksQueue, ResultsDiffer, FailureFlag):
"""
:param ResultsDiffer: Used to signify that results differ from
the canonical ones.
:param FailureFlag: Used to signify a failure during the run.
"""
+ self.Args = Args
self.TasksQueue = TasksQueue
self.ResultsDiffer = ResultsDiffer
self.FailureFlag = FailureFlag
@@ -649,7 +652,7 @@ class TestProjectThread(threading.Thread):
Logger = logging.getLogger(ProjArgs[0])
Local.stdout = StreamToLogger(Logger, logging.INFO)
Local.stderr = StreamToLogger(Logger, logging.ERROR)
- if not testProject(*ProjArgs):
+ if not testProject(Args, *ProjArgs):
self.ResultsDiffer.set()
self.TasksQueue.task_done()
except:
@@ -657,7 +660,7 @@ class TestProjectThread(threading.Thread):
raise
-def testProject(ID, ProjectBuildMode, IsReferenceBuild=False, Strictness=0):
+def testProject(Args, ID, ProjectBuildMode, IsReferenceBuild=False, Strictness=0):
"""
Test a given project.
:return TestsPassed: Whether tests have passed according
@@ -675,7 +678,7 @@ def testProject(ID, ProjectBuildMode, IsReferenceBuild=False, Strictness=0):
RelOutputDir = getSBOutputDirName(IsReferenceBuild)
SBOutputDir = os.path.join(Dir, RelOutputDir)
- buildProject(Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild)
+ buildProject(Args, Dir, SBOutputDir, ProjectBuildMode, IsReferenceBuild)
checkBuild(SBOutputDir)
@@ -719,17 +722,17 @@ def validateProjectFile(PMapFile):
" (single file), 1 (project), or 2(single file c++11)."
raise Exception()
-def singleThreadedTestAll(ProjectsToTest):
+def singleThreadedTestAll(Args, ProjectsToTest):
"""
Run all projects.
:return: whether tests have passed.
"""
Success = True
for ProjArgs in ProjectsToTest:
- Success &= testProject(*ProjArgs)
+ Success &= testProject(Args, *ProjArgs)
return Success
-def multiThreadedTestAll(ProjectsToTest, Jobs):
+def multiThreadedTestAll(Args, ProjectsToTest, Jobs):
"""
Run each project in a separate thread.
@@ -747,7 +750,7 @@ def multiThreadedTestAll(ProjectsToTest, Jobs):
FailureFlag = threading.Event()
for i in range(Jobs):
- T = TestProjectThread(TasksQueue, ResultsDiffer, FailureFlag)
+ T = TestProjectThread(Args, TasksQueue, ResultsDiffer, FailureFlag)
T.start()
# Required to handle Ctrl-C gracefully.
@@ -772,9 +775,9 @@ def testAll(Args):
Args.regenerate,
Args.strictness))
if Args.jobs <= 1:
- return singleThreadedTestAll(ProjectsToTest)
+ return singleThreadedTestAll(Args, ProjectsToTest)
else:
- return multiThreadedTestAll(ProjectsToTest, Args.jobs)
+ return multiThreadedTestAll(Args, ProjectsToTest, Args.jobs)
if __name__ == '__main__':
@@ -791,6 +794,9 @@ if __name__ == '__main__':
Parser.add_argument('-j', '--jobs', dest='jobs', type=int,
default=0,
help='Number of projects to test concurrently')
+ Parser.add_argument('--extra-analyzer-args', dest='extra_args',
+ type=str, default="",
+ help="Extra arguments to add to -analyzer-config")
Args = Parser.parse_args()
TestsPassed = testAll(Args)