]> granicus.if.org Git - clang/commitdiff
[lit] Fix Analysis test format pickling error
authorReid Kleckner <rnk@google.com>
Wed, 5 Apr 2017 18:56:48 +0000 (18:56 +0000)
committerReid Kleckner <rnk@google.com>
Wed, 5 Apr 2017 18:56:48 +0000 (18:56 +0000)
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

test/Analysis/analyzer_test.py [new file with mode: 0644]
test/Analysis/lit.local.cfg

diff --git a/test/Analysis/analyzer_test.py b/test/Analysis/analyzer_test.py
new file mode 100644 (file)
index 0000000..58df11a
--- /dev/null
@@ -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
index 563d4188ab3f444fda0462fd46a24de2e6c30d9d..a594c5dada58fe2a2a284b4391c65dbafd194366 100644 (file)
@@ -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