Skip to content
Snippets Groups Projects
Commit 1c37f813 authored by Reid Kleckner's avatar Reid Kleckner
Browse files

[lit] Fix Analysis test format pickling error

Move the test format into a standalone .py file and add it to the site
module search path. This allows us to run the test on Windows, and it
makes it compatible with the multiprocessing.Pool lit test execution
strategy.

I think this test was only passing everywhere else because
multiprocessing uses 'fork' to spawn workers, so the test format never
needs to be pickled.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@299577 91177308-0d34-0410-b5e6-96231b3b80d8
parent bbbe98c7
No related branches found
No related tags found
No related merge requests found
import lit.formats
import lit.TestRunner
# Custom format class for static analyzer tests
class AnalyzerTest(lit.formats.ShTest):
def execute(self, test, litConfig):
result = self.executeWithAnalyzeSubstitution(
test, litConfig, '-analyzer-constraints=range')
if result.code == lit.Test.FAIL:
return result
# If z3 backend available, add an additional run line for it
if test.config.clang_staticanalyzer_z3 == '1':
result = self.executeWithAnalyzeSubstitution(
test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3')
return result
def executeWithAnalyzeSubstitution(self, test, litConfig, substitution):
saved_substitutions = list(test.config.substitutions)
test.config.substitutions.append(('%analyze', substitution))
result = lit.TestRunner.executeShTest(test, litConfig,
self.execute_external)
test.config.substitutions = saved_substitutions
return result
import lit.TestRunner
import sys
# -*- Python -*- vim: set ft=python ts=4 sw=4 expandtab tw=79:
# Custom format class for static analyzer tests
class AnalyzerTest(lit.formats.ShTest, object):
import site
def execute(self, test, litConfig):
result = self.executeWithAnalyzeSubstitution(test, litConfig, '-analyzer-constraints=range')
if result.code == lit.Test.FAIL:
return result
# If z3 backend available, add an additional run line for it
if test.config.clang_staticanalyzer_z3 == '1':
result = self.executeWithAnalyzeSubstitution(test, litConfig, '-analyzer-constraints=z3 -DANALYZER_CM_Z3')
return result
def executeWithAnalyzeSubstitution(self, test, litConfig, substitution):
saved_substitutions = list(test.config.substitutions)
test.config.substitutions.append(('%analyze', substitution))
result = lit.TestRunner.executeShTest(test, litConfig, self.execute_external)
test.config.substitutions = saved_substitutions
return result
# This results in a pickling-related failure on Windows
if (not sys.platform in ['win32']):
config.test_format = AnalyzerTest(config.test_format.execute_external)
else:
config.substitutions.append(('%analyze', '-analyzer-constraints=range'))
# Load the custom analyzer test format, which runs the test again with Z3 if it
# is available.
site.addsitedir(os.path.dirname(__file__))
import analyzer_test
config.test_format = analyzer_test.AnalyzerTest(
config.test_format.execute_external)
if not config.root.clang_staticanalyzer:
config.unsupported = True
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment