diff --git a/test/Analysis/analyzer_test.py b/test/Analysis/analyzer_test.py new file mode 100644 index 0000000000000000000000000000000000000000..58df11a4ba4791a63e891090b26f458cc7420da2 --- /dev/null +++ b/test/Analysis/analyzer_test.py @@ -0,0 +1,28 @@ +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 diff --git a/test/Analysis/lit.local.cfg b/test/Analysis/lit.local.cfg index 563d4188ab3f444fda0462fd46a24de2e6c30d9d..a594c5dada58fe2a2a284b4391c65dbafd194366 100644 --- a/test/Analysis/lit.local.cfg +++ b/test/Analysis/lit.local.cfg @@ -1,34 +1,13 @@ -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